python - 修改 pandas 数据框中的值

标签 python pandas

假设我有以下数据框:

import pandas as pd
df = pd.DataFrame(['a', 'b', 'c', 'd', 'a', 'c', 'f', 'a'])
print(df)

我可以将任何出现的“a”替换为“AAA”,如下所示:

df.columns = ['Letters']   
for i, x in enumerate(df['Letters']):
    if x == 'a':
        df['Letters'][i] = "AAA"
print(df)

但是,如果我提取唯一行并尝试执行相同的操作,则它不起作用。

df = pd.DataFrame(['a', 'b', 'c', 'd', 'a', 'c', 'f', 'a'])
df.columns = ['Letters']
grouped = df.groupby('Letters')
index = [gp_keys[0] for gp_keys in grouped.groups.values()]
unique_df = df.reindex(index)
print(unique_df) 

for i, x in enumerate(unique_df):
    if x == 'a':
        unique_df.loc[i] = "AAA"
print(unique_df)

我很好奇为什么执行 unique_df[i] = "AAA" 不再修改数据帧值。即使按照 View 与复制帖子 here 中的建议执行 unique_df.loc[i] = "AAA"似乎没有什么区别。似乎 groupby 函数中有些东西使得以后对数据框的修改变得难以捉摸。有什么想法吗?

最佳答案

这可能没有完全回答问题,因为您提供的示例可以简化,但在这种情况下您确实不应该枚举。
如果您想根据条件修改某些值,可以使用 bool 索引,例如:

df.loc[df['Letters']=='a', 'Letters'] = "AAA"

而不是执行 for 循环。

<小时/>

原始问题的答案:您需要在第二个示例中使用 unique_df['Letters'] 而不是 unique_df (正如您在第一个示例中所做的那样) )。

关于python - 修改 pandas 数据框中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27642681/

相关文章:

python - 如何阻止 random.choice() 在 while 循环中进行选择?

python - Pandas 滚动 OLS 被弃用

Python:通过非整数比例因子重新调整 pandas 中的时间序列

python - 将所有使用的Python模块收集到一个文件夹中?

带 { } 的 python 格式函数

python - 我应该在服务器端渲染 ajax 响应吗?

python - 如何使用 groupby 执行引用数据框中数据子集上一行的函数

python - Pandas groupby 与 lambda 并在列表中

python - 替换 Pandas 中的行值

python - 优化旋转和填充