pandas fillna有多个列

时间:2016-08-19 15:33:47

标签: python pandas

我使用pandas.concat将多个Dataframe加在一起,并希望将一个列中的NaN值填入其他几列的value

为了得到下表,我做了:z = pandas.concat([df1, df2, df3], axis=0, join='outer')

连接表

    C_header1    C_header2   C_header3   Column1    Column2    Column3
0   Item1        NaN         NaN         Values     Values     Values
1   Item2        NaN         NaN         Values     Values     Values
2   Item3        NaN         NaN         Values     Values     Values
3   Item4        NaN         NaN         Values     Values     Values
4   Item5        NaN         NaN         Values     Values     Values
5   NaN          Item6       NaN         Values     Values     Values
6   NaN          Item7       NaN         Values     Values     Values
7   NaN          Item8       NaN         Values     Values     Values
8   NaN          NaN         Item9       Values     Values     Values
9   NaN          NaN         Item10      Values     Values     Values

目前,我运行以下代码将C_header1, C_header2, C_header3放在一起

z['C_header1'].fillna(z['C_header2'], inplace=True)
z['C_header1'].fillna(z['C_header3'], inplace=True)
z.drop(['C_header2', 'C_header3'], inplace=True)

获取

    C_header1    Column1    Column2    Column3
0   Item1        Values     Values     Values
1   Item2        Values     Values     Values
2   Item3        Values     Values     Values
3   Item4        Values     Values     Values
4   Item5        Values     Values     Values
5   Item6        Values     Values     Values
6   Item7        Values     Values     Values
7   Item8        Values     Values     Values
8   Item9        Values     Values     Values
9   Item10       Values     Values     Values

有更多的pythonic方式吗?感觉就像我错过了一些东西

1 个答案:

答案 0 :(得分:-1)

如果您确保df1df2df3具有相同的列,则会根据需要进行连接。

在这种情况下,你可以这样做:

df2.columns = df1.columns
df3.columns = df1.columns

# at this point concat will give you the desired result
pandas.concat(rename_columns(df1, df2, df3))

注意一般来说,最好使用pandas.DataFrame.rename重命名列。