私は10年間Pythonから離れていたので、これは本当にばかげたことかもしれません。
16 進文字列データを含む列がいくつかある rebal という名前の pandas データフレームに次の関数を適用しています。
def hex2page(s, pagesize=1):
if(s[:2]=='0x'):
i=long(s,16)*pagesize
#print(s, i)
return i
return None
これは正常に実行されたもので、10 進数に直接変換された新しい列 'Allocated' (右端) が表示されます。
rebal['Allocated']=rebal['Alc_PG'].apply(hex2page)
rebal.head()
Time Stamp LOG POOL Cap T_DEVNum E_DEVNum HDEV Alc_PG T_MVPG E_MVPG 0DPG Hist Allocated
0 2013/08/20 08:51:50 00642fff 0 --- --- --- 0x7c8a --- --- 0x0000d 0x00000 DPV END NaN
1 2013/08/20 08:51:50 00642fff 0 --- --- --- 0x7c8b 0x002e0 0x0008d --- --- DPV START 736
2 2013/08/20 08:51:47 00642ffe 0 --- --- --- 0x7c89 --- --- 0x00018 0x00000 DPV END NaN
3 2013/08/20 08:51:47 00642ffe 0 --- --- --- 0x7c8a 0x002b6 0x0000d --- --- DPV START 694
4 2013/08/20 08:51:40 00642ffd 0 --- --- --- 0x7c89 0x002a0 0x00018 --- --- DPV START 672
したがって、列 Alc_PG で機能します。しかし、同じ形式の文字列で別の列を試してみると、すべての 16 進文字列に対してゼロを返すことに失敗します。
rebal['T_MVPG'].apply(hex2page)
0 NaN
1 0
2 NaN
3 0
4 0
5 NaN
しかし、上記の関数で #print のコメントを外すと、正しい変換が出力されます。
('0x0008d', 141L)
('0x0000d', 13L)
('0x00018', 24L)
('0x00070', 112L)
('0x00073', 115L)
('0x00011', 17L)
('0x00062', 98L)
だから私はとても混乱しています。タイプをチェックするためにそこにプリントさえありましたが、sは間違いなくstrとして関数に入っています。
誰でもアイデアはありますか?
rebal[0:5].to_dict()
{'0DPG': {0: '0x00000', 1: '---', 2: '0x00000', 3: '---', 4: '---'},
'Alc_PG': {0: '---', 1: '0x002e0', 2: '---', 3: '0x002b6', 4: '0x002a0'},
'Allocated': {0: nan, 1: 736.0, 2: nan, 3: 694.0, 4: 672.0},
'Cap': {0: '---', 1: '---', 2: '---', 3: '---', 4: '---'},
'E_DEVNum': {0: '---', 1: '---', 2: '---', 3: '---', 4: '---'},
'E_MVPG': {0: '0x0000d', 1: '---', 2: '0x00018', 3: '---', 4: '---'},
'HDEV': {0: '0x7c8a', 1: '0x7c8b', 2: '0x7c89', 3: '0x7c8a', 4: '0x7c89'},
'Hist': {0: 'DPV END',
1: 'DPV START',
2: 'DPV END',
3: 'DPV START',
4: 'DPV START'},
'LOG': {0: '00642fff',
1: '00642fff',
2: '00642ffe',
3: '00642ffe',
4: '00642ffd'},
'POOL': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0},
'T_DEVNum': {0: '---', 1: '---', 2: '---', 3: '---', 4: '---'},
'T_MVPG': {0: '---', 1: '0x0008d', 2: '---', 3: '0x0000d', 4: '0x00018'},
'Target': {0: nan, 1: 141.0, 2: nan, 3: 13.0, 4: 24.0},
'Time Stamp': {0: '2013/08/20 08:51:50',
1: '2013/08/20 08:51:50',
2: '2013/08/20 08:51:47',
3: '2013/08/20 08:51:47',
4: '2013/08/20 08:51:40'}}