2017-01-22 119 views
1

我有一個問題:fillna其他數據框列

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 

None位於df1的第一行(索引= 0)。所以我使用df2第一行(與df1第一行具有相同的日期)來替換它。

空字符串在df1第二行(索引= 1),df2第二個空字符串。因此我使用df3第二行來回報它。

df1第三行不包含無和空字符串,我不更改此行。

感謝

+0

這將是值得指定你如何通過你的DataFrames要循環和填充楠規則從數據框中的值。 – oliversm

+0

@oliversm,順序是df1 df2 df3。如果df1行包含None或空字符串,則檢查df2,如果df2行包含None或空字符串,則檢查df3。否則無。 – pang2016

+0

所以你只對結果'df1'感興趣? – oliversm

回答

1

你可以通過每個數據幀循環,並與np.NaN取代None和空字符串。無論何時出現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會進行相應的修改。

使用DF.combine_first()df1→df2→df3爲了填補缺失值。

df1.combine_first(df2).combine_first(df3) 

enter image description here

相關問題