1
我有一個數據幀熊貓與program
,dataset
,algorithm
,和result
字段,其中result
表示在一個特定的算法和數據集上運行的程序的運行時間。一些結果不見了。我想用dataset
和algorithm
作爲參考程序Program-A
來填補這些缺失結果。熊貓:使用fillna與數據幀作爲value參數
我很樂意就如何改進我的代碼採取任何建議。但我的具體問題是,爲什麼我無法將DataFrame傳遞到fillna
的值參數中,而是必須將其轉換爲字典。 (該文件說value : scalar, dict, Series, or DataFrame
)
col = ['program', 'dataset', 'algorithm', 'result']
df = pandas.DataFrame(
[['program-A', 'dataset-X', 'algorithm-i', 1],
['program-A', 'dataset-X', 'algorithm-j', 2],
['program-A', 'dataset-Y', 'algorithm-i', 3],
['program-A', 'dataset-Y', 'algorithm-j', 4],
['program-B', 'dataset-X', 'algorithm-j', numpy.NaN]
], columns=col)
df['algorithm_dataset'] = df['algorithm'] + "_" + df['dataset']
# build a dict from {algorithm+dataset} to result
dfg = df.loc[df['program'] == 'program-A'][['algorithm_dataset',
'result']]
dfg = dfg.set_index('algorithm_dataset')
dfg_dict = dfg.to_dict()['result']
df = df.set_index('algorithm_dataset')
# df['result'] = df['result'].fillna(value=dfg)
# what's above doesn't work:
# ValueError: invalid fill value with a <class 'pandas.core.frame.DataFrame'>
# so instead:
df['result'] = df['result'].fillna(value=dfg_dict)
df = df.reset_index()
print df
版本:
$ port installed | grep pandas
py27-pandas @0.19.1_0 (active)
$ python --version
Python 2.7.12
感謝您給我們詳細的,有用的答案。 – jowens