python - 由其他数据框行填充

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

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

随后,df1df2df3 将进行相应修改。

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

df1.combine_first(df2).combine_first(df3)

enter image description here

关于python - 由其他数据框行填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41789007/

相关文章:

python - 使用 Python 在 MS Access 数据库中插入或更新行

python - 浮点运算 : Possible unsafe reliance on specific comparison?

python - 如何在我的 pygame 程序中实现此功能?

python - 如何用与 B 列相关的平均值替换 A 列中的 NaN 值?

python - 使用 to_csv() 另存为 csv 时,如何从数据框中删除或删除标记为 "index"的列

python - 从 Pandas Dataframe 获取一个或多个列值作为列表

python - 运行代码时,我得到 "init done opengl support available"作为输出消息,但我没有得到输出图像

python - 如何调试我的 Python 骰子游戏?

python - Python 中等效的 Unix Source 命令

python - 如何将 sklearn "LinearRegression"与列表一起使用?