python - 当数据框有重复的列时,fillna 函数似乎无法与 dict 参数一起正常工作
问题描述
我发现在使用 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)
初始数据框:
a a b c
0 1 1 NaN 40.0
1 2 2 20.0 NaN
2 3 3 30.0 60.0
df.fillna() 后数据不变:
a a b c
0 1 1 NaN 40.0
1 2 2 20.0 NaN
2 3 3 30.0 60.0
解决方案
如评论中所述,在存在重复列名的情况下将值分配给数据框存在问题。但是,您可以使用此解决方法:
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)
结果:
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
推荐阅读
- c# - C# 运行 WSL 命令,等待完成然后退出
- java - Jackson Object Mapper 读取具有可变字段/val 类型的对象
- python - JSONDecodeError:期望值:第 2 行第 1 列(字符 2)
- python - 文件夹的美丽汤 HTML 解析器循环
- python - 仍然得到 AttributeError: module 'tensorflow' has no attribute 'gfile' 在尝试了所有的事情来解决这个问题之后
- javascript - 如何根据内容调整容器的大小而不重复相同的代码行?
- regex - 使用 IIS URL Rewite 删除我的 URL 中的子文件夹名称
- java - 使用接口类型绑定和隐式的泛型重写方法
- c - 作为输入输入的大数字会自动更改。我该如何阻止这个?
- java - 如何更改超类方法的参数?