数据框中现有值的 Python 条件 NaN 值替换

Posted

技术标签:

【中文标题】数据框中现有值的 Python 条件 NaN 值替换【英文标题】:Python Conditional NaN Value Replacement of existing Values in Dataframe 【发布时间】:2022-01-24 05:14:44 【问题描述】:

我尝试转换从 CSV 加载的 DataFrame 女巫。 在该 CSV 中是具有 NaN / 无值的列。目标是全部替换!

例如在'gh'列第45行(如图所示:Input Dataframe)是缺少值。我喜欢用第 1 行的值替换它,因为 'latitude','longitude', 'time' ,'step','valid_time' 是相等的。所以我喜欢用这些值进行基于条件的替换。但不仅适用于“gh”,还适用于 meanSea、msl、t、u 和 v。

Input Dataframe

我尝试过类似的方法(仅用于“gh”):

for i,row in df.iterrows():
    value = row["gh"]
    if pd.isnull(value):
        for j,rowx in df.iterrows():
            if row["latitude"]==rowx["latitude"] and row["longitude"]==rowx["longitude"] and row["time"]==rowx["time"] and row["step"]==rowx["step"]and row["valid_time"]==rowx["valid_time"]:
                valuex = rowx["gh"] 
                row["gh"]=valuex
                break;
            

My Try

这对于大数据框来说效率很低,所以我需要一个更好的解决方案。

【问题讨论】:

欢迎来到 ***。请花时间阅读how to provide a great pandas example 上的这篇文章以及如何提供minimal, complete, and verifiable example 并相应地修改您的问题。 how to ask a good question 上的这些提示也可能有用。 【参考方案1】:

假设所有值都可以在数据集中的某处找到,最简单的方法是按这些列('latitude'、'longitude'、'time'、'step'、'valid_time')对您的 df 进行排序并向前填充您的NaN:

df.sort_values(by=['latitude','longitude', 'time' ,'step','valid_time']).ffill()

但是,如果数据集中的其他地方没有对应的行,这会失败

【讨论】:

以上是关于数据框中现有值的 Python 条件 NaN 值替换的主要内容,如果未能解决你的问题,请参考以下文章

熊猫数据框中的多个if条件 - Python

替换数据框中的 NaN 索引值

用相关列的平均值替换数据框中的 NaN 值的函数

在 pandas 数据框中显示具有一个或多个 NaN 值的行

在python中的数据框中计算与引用可变值的条件相匹配的行

计算 Pandas 数据框中 np.nan 的数量