假设我有以下两个DataFrames
:
X Y Z
1 0.0 0.0 0.0
2 1.0 2.0 3.0
3 4.0 2.0 0.0
4 NaN NaN NaN
5 NaN NaN NaN
6 NaN NaN NaN
7 NaN NaN NaN
8 NaN NaN NaN
和
X.2 Y.2 Z.2
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
6 9.0 3.0 6.0
7 7.0 4.0 3.0
8 3.0 6.0 8.0
我想用第二个中的值填充第一个DataFrame
中的缺失数据。结果应如下所示:
X Y Z
1 0.0 0.0 0.0
2 1.0 2.0 3.0
3 4.0 2.0 0.0
4 NaN NaN NaN
5 NaN NaN NaN
6 9.0 3.0 6.0
7 7.0 4.0 3.0
8 3.0 6.0 8.0
如果可能,我希望避免创建新的DataFrame
,但要填写第一个DataFrame
。
我该怎么做?
答案 0 :(得分:5)
您可以使用update
继续,根据df1
的值填充第一个数据框df2
:
df2.columns = df1.columns
df1.update(df2)
In [118]: df1
Out[118]:
X Y Z
1 0 0 0
2 1 2 3
3 4 2 0
4 NaN NaN NaN
5 NaN NaN NaN
6 9 3 6
7 7 4 3
8 3 6 8
答案 1 :(得分:0)
如果重命名第二个数据帧的列,则可以像这样使用concat和groupby:
In[96]: df1
Out[96]:
X Y Z
1 0 0 0
2 1 2 3
3 4 2 0
4 NaN NaN NaN
5 NaN NaN NaN
6 NaN NaN NaN
7 NaN NaN NaN
8 NaN NaN NaN
In[101]: df2
Out[101]:
X Y Z
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
6 9 3 6
7 7 4 3
8 3 6 8
In[102]: pd.concat([df1,df2]).groupby(level=0).sum()
Out[102]:
X Y Z
1 0 0 0
2 1 2 3
3 4 2 0
4 NaN NaN NaN
5 NaN NaN NaN
6 9 3 6
7 7 4 3
8 3 6 8
答案 2 :(得分:0)
with python if dataframe could be list of lists
d1 =[[1,0.0, 0.0, 0.0],
[2,1.0, 2.0, 3.0],
[3,4.0, 2.0, 0.0],
[4,'NaN', 'NaN', 'NaN'],
[5,'NaN', 'NaN', 'NaN'],
[6,'NaN', 'NaN', 'NaN'],
[7,'NaN', 'NaN', 'NaN'],
[8,'NaN', 'NaN', 'NaN']]
d2 = [[1,'NaN', 'NaN', 'NaN'],
[2,'NaN', 'NaN', 'NaN'],
[3,'NaN', 'NaN', 'NaN'],
[4,'NaN', 'NaN', 'NaN'],
[5,'NaN', 'NaN', 'NaN'],
[6,9.0, 3.0, 6.0],
[7,7.0, 4.0, 3.0],
[8,3.0, 6.0, 8.0]]
def replace_row(l,ln):
for i, el in enumerate(l):
if el == 'NaN':
l[i] = ln[i]
for i,l1 in enumerate(d1):
for j, l2 in enumerate(d2):
if i == j:
replace_row(l1,l2)
for el in d1:
print(el)
result in:
[1, 0.0, 0.0, 0.0]
[2, 1.0, 2.0, 3.0]
[3, 4.0, 2.0, 0.0]
[4, 'NaN', 'NaN', 'NaN']
[5, 'NaN', 'NaN', 'NaN']
[6, 9.0, 3.0, 6.0]
[7, 7.0, 4.0, 3.0]
[8, 3.0, 6.0, 8.0]
答案 3 :(得分:0)
如果你将列排成一行,那么fillna()将执行此操作:
df2.columns = df1.column
df1.fillna(df2, inplace=True)
df1
X Y Z
1 0 0 0
2 1 2 3
3 4 2 0
4 NaN NaN NaN
5 NaN NaN NaN
6 9 3 6
7 7 4 3
8 3 6 8