合并两个CSV以替换NaN

时间:2015-02-16 20:27:20

标签: python numpy pandas

我有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)

但它不起作用。

2 个答案:

答案 0 :(得分:1)

假设两个文件已对齐且您只想填充单元格,则可以使用wherecombine_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()