fillna由其他数据帧行

时间:2017-01-22 08:50:00

标签: python pandas

我遇到了问题:

import pandas
df1=pandas.DataFrame([['2017-1-22',25,None],['2017-1-23','',''],['2017-1-24',24,15]],columns=['date','high_tem','low_tem'])
df2=pandas.DataFrame([['2017-1-22',22,18],['2017-1-23',23,''],['2017-1-24',20,10]],columns=['date','high_tem','low_tem'])
df3=pandas.DataFrame([['2017-1-22',25,16],['2017-1-23',24,18],['2017-1-24',22,11]],columns=['date','high_tem','low_tem'])

df1,df2,df3是这样的:

        date high_tem low_tem
0  2017-1-22       25    None
1  2017-1-23                 
2  2017-1-24       24      15
        date  high_tem low_tem
0  2017-1-22        22      18
1  2017-1-23        23        
2  2017-1-24        20      10
        date  high_tem  low_tem
0  2017-1-22        25       16
1  2017-1-23        24       18
2  2017-1-24        22       11

我尝试得到这样的结果:

         date  high_tem  low_tem
0  2017-1-22        22       18
1  2017-1-23        24       18
2  2017-1-24        24       15

无在df1的第一行(索引= 0)。所以我使用df2第一行(与df1第一行具有相同的日期)来替换它。

Null字符串在df1第二行(索引= 1),df2第二行有空字符串。所以我使用df3第二行来重复它。

df1 thrid行不包含None和Null字符串,我不会更改此行。

由于

1 个答案:

答案 0 :(得分:1)

您可以遍历每个数据框并将None和空字符串替换为np.NaN。只要存在任何NaNs,请用它填充整行。

for df in [df1, df2, df3]:
    df.replace({None: np.NaN, "": np.NaN}, inplace=True)
    df.loc[df.isnull().any(axis=1), ['high_tem', 'low_tem']] = np.NaN

在此之后,df1df2df3会相应修改。

df1→df2→df3顺序中使用DF.combine_first()来填充缺失值。

df1.combine_first(df2).combine_first(df3)

enter image description here