我有一个问题:
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 第三行不包含 None 和 Null 字符串,我不更改此行。
谢谢
最佳答案
您可以循环遍历每个数据帧,并用 np.NaN
替换 None
和空字符串。只要存在任何 NaN
,就用它填充整行。
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
随后,df1
、df2
和 df3
将进行相应修改。
使用DF.combine_first()
按df1→df2→df3
顺序填充缺失值。
df1.combine_first(df2).combine_first(df3)
关于python - 由其他数据框行填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41789007/