python - 当数据框有重复的列时,fillna 函数似乎无法与 dict 参数一起正常工作

标签 python pandas

我发现在使用 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

关于python - 当数据框有重复的列时,fillna 函数似乎无法与 dict 参数一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54210213/

相关文章:

python - 将第三方库转换为 asyncio

python - 以奇怪的角度发射的子弹pygame

Python:按键集对列表进行分组

python - Pandas 基于其他两个具有日期时间值的列创建一个 bool 列

python - 将非数字行转换为具有自定义列名称的列

python - 使用 pandas dataframe styler 正确的行着色

python - 初学者对python中的类和方法的询问

python - 带有土耳其字符的字符串到 unicode

python - pandas 中的过滤日期范围 raised `UserWarning: Boolean Series key will be reindexed to match DataFrame index.`

python - 如何在 Python 中创建条件低于或高于中位数的虚拟变量?