我有2个csv文件,一个包含大量NaN和空格的原始数据,另一个csv文件包含NaN的答案。
如何在不更改任何原始值的情况下,仅使用第二个csv文件中的内容替换NaN。大熊猫是否有一个简单的解决方案。
import pandas as pd
import numpy as np
a = pd.read_csv('training.csv',header=0)
b = pd.read_csv('training_predict.csv')
print 'input shapes', a.shape, b.shape
a[:,:29] = np.where(np.isnan(a[:,:29].values), b.values, a[:,:29].values)
a.to_csv('training_new.csv')
我尝试使用
a = a.fillna(b, inplace=True)
但它不起作用。
答案 0 :(得分:1)
假设两个文件已对齐且您只想填充单元格,则可以使用where
或combine_first
,具体取决于您的偏好:
>>> a = pd.DataFrame([[10.0, 20.0, np.nan], [30.0, np.nan, 60.0], [np.nan, 80.0, 90.0]], columns=["a","b","c"])
>>> b = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=["a","b","c"])
>>> a
a b c
0 10 20 NaN
1 30 NaN 60
2 NaN 80 90
>>> b
a b c
0 1 2 3
1 4 5 6
2 7 8 9
>>> a.where(a.notnull(), b)
a b c
0 10 20 3
1 30 5 60
2 7 80 90
>>> a.combine_first(b)
a b c
0 10 20 3
1 30 5 60
2 7 80 90
答案 1 :(得分:0)
这对我有用:)
import pandas as pd
import numpy as np
a = pd.read_csv('training.csv',header=0, nrows=7048)
b = pd.read_csv('training_predict.csv')
#a = a.where(a.notnull(), b)
#a = a.combine_first(b)
#a = a.where(~np.isnan(a), other = b, inplace = True)
a = np.where(np.isnan(a.values), b.values, a.values)
df = pd.DataFrame(a)
df = pd.concat([df,b],axis=1)
df.info()