python - 在 Panda DataFrame 中使用 For 循环 (Python)

标签 python pandas

我有一个 Python 数据框 (df),具有一些功能,但我将使用 AgeAge_Mean 列。

Age列中,有几个null值。我想用 Age_Mean 列中的相同索引替换这些空值。

这是我使用的代码:

    for i in df:
        if df['Age'].isnull().iloc[i] == True:
            df['Age'].iloc[i] == df['Age_Mean'].iloc[i]

这是我的错误消息:

KeyError: 'the label [Age] is not in the [index]'

请告诉我这段代码有什么问题。

最佳答案

语句for i in df将迭代列名。让我们举一个例子来更好地理解这一点:

df = pd.DataFrame({"Age":np.array([2,3,np.nan,8,np.nan]),"Age_mean":np.array([2,5,9,2,1])})
df

所以数据框将如下所示:

    Age Age_mean
0   2.0 2
1   3.0 5
2   NaN 9
3   8.0 2
4   NaN 1

现在让我们看看 for 循环将迭代什么:

for i in df:
     print(i)

输出

Age
Age_mean

现在,当您尝试执行 df['Age'].isnull().iloc[i] 时,它会抛出错误,因为 i 的值> 在这种情况下将是年龄

建议的解决方案:

我们可以在没有 for 循环的情况下完成此操作,如下所示:

nan_index = df['Age'].index[df['Age'].apply(np.isnan)]
df.loc[nan_index,"Age"] = df.loc[nan_index,"Age_mean"]

第一行将返回 Age 值为 NaN 的行的索引。一旦我们知道,我们只需将它们替换为 Age_mean 列中的值,这是由第二条语句完成的。

输出

    Age Age_mean
0   2.0 2
1   3.0 5
2   9.0 9
3   8.0 2
4   1.0 1

关于python - 在 Panda DataFrame 中使用 For 循环 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56683090/

相关文章:

Python Pandas 遍历整个列并检查它是否包含某个 str

python - 用子图绘制 Pandas 数据框(子图=真): Place legend and use tight layout

python - 将每日数据按月份分组并计算每个用户的对象数

python - 从 ArDrone 2.0 获取图像,并使用 cv2

python - 在 DataFrame 上应用 .value_counts(),并在每个单元格中填充列表

python - Gensim:ValueError:无法创建意图(缓存|隐藏)|可选数组 - 必须定义尺寸但得到(0,)

python - Pandas 按 block 而不是单个值进行分组

python - 为什么 python 的 datetime.datetime.strptime ('201412' , '%Y%m%d' ) 不引发 ValueError?

Python:让这段代码更紧凑?

python - 如何提取pandas DataFrame中的属性名称和最大共现计数?