当数据框具有重复的列时,似乎fillna函数不能与dict参数一起正常工作

时间:2019-01-16 03:57:59

标签: 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

1 个答案:

答案 0 :(得分:1)

如注释中所述,在存在重复的列名的情况下将值分配给数据框存在问题。 但是,您可以使用以下解决方法:

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