python - Pandas :替换缺失的数据框值/条件计算:fillna

标签 python pandas dataframe nan

我想计算一个 pandas 数据框,但有些行包含缺失值。对于那些缺失值,我想使用不同的算法。让我们说:

  • 如果 B 列包含一个值,则从 B 中减去 A
  • 如果 B 列包含值,则从 C 中减去 A
import pandas as pd
df = pd.DataFrame({'a':[1,2,3,4], 'b':[1,1,None,1],'c':[2,2,2,2]})
df['calc'] = df['b']-df['a']

结果:

print(df)
   a    b  c  calc
0  1  1.0  2   0.0
1  2  1.0  2  -1.0
2  3  NaN  2   NaN
3  4  1.0  2  -3.0

方法 1: 使用 .where 填充 NaN 行:

df['calc'].where(df['b'].isnull()) = df['c']-df['a']

导致SyntaxError: cannot assign to function call

方法 2: 使用 .iterrows() 填充 NaN 行:

for index, row in df.iterrows():
    i = df['calc'].iloc[index]

    if pd.isnull(row['b']):
        i = row['c']-row['a']
        print(i)
    else:
        i = row['b']-row['a']
        print(i)

执行无误且计算正确,这些i值打印到控制台:

0.0
-1.0
-1.0
-3.0

值没有写入df['calc'],数据帧保持原样:

print(df['calc'])
0    0.0
1   -1.0
2    NaN
3   -3.0

覆盖 NaN 值的正确方法是什么?

最佳答案

最后,我偶然发现了.fillna:

df['calc'] = df['calc'].fillna( df['c']-df['a'] )

完成任务!谁能解释一下上述两种方法有什么问题...?

关于python - Pandas :替换缺失的数据框值/条件计算:fillna,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65811195/

相关文章:

python - 如何从数据帧中的列中减去标量值并仅选择满足某些条件的行

python - 除以0时,我希望它打印给定的文本

python - 在docker中通过cron运行时的`/bin/sh: 1: python: not found`

python - 如何在 OSx 和 virtualenv 中使用 Python Matplotlib?

Python Pandas 使用 Fastparquet 将 CSV 转换为 Parquet

python - 使用索引作为 x 轴标签绘制直方图

python - 如何在 python 中根据索引绘制图形

python-3.x - 将数据从数据框的顶部移动到底部(df 的列具有不同的长度索引)

python - 将字符串的 Pandas DataFrame 转换为直方图

python - 遍历数字并评估数字是否可以被某些数字整除