我发现在使用pd.concat()连接具有相同列名的两个数据帧之后,df.fillna()将无法正确使用dict参数指定每列使用哪个值.
我不知道为什么?我的理解有问题吗?
a1 = pd.DataFrame({'a': [1, 2, 3]})
a2 = pd.DataFrame({'a': [1, 2, 3]})
b = pd.DataFrame({'b': [np.nan, 20, 30]})
c = pd.DataFrame({'c': [40, np.nan, 60]})
x = pd.concat([a1,a2, b, c], axis=1)
print(x)
x = x.fillna({'b':10, 'c': 50})
print(x)
Run Code Online (Sandbox Code Playgroud)
运行上面的代码,输出显示没有任何变化:
a a b c
0 1 1 NaN 40.0
1 2 2 20.0 NaN
2 3 3 30.0 60.0
Run Code Online (Sandbox Code Playgroud)
正如评论中提到的,在存在重复列名的情况下向数据框分配值会出现问题。但是,您可以使用此解决方法:
for col,val in {'b':10, 'c': 50}.items():
new_col = x[col].fillna(val)
idx = int(x.columns.get_loc(col))
x = x.drop(col,axis=1)
x.insert(loc=idx, column=col, value=new_col)
print(x)
Run Code Online (Sandbox Code Playgroud)
结果:
a a b c
0 1 1 10.0 40.0
1 2 2 20.0 50.0
2 3 3 30.0 60.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |