无法更改特定位置的数据框的值

时间:2020-02-12 23:18:26

标签: python pandas dataframe

因此,我尝试以大熊猫浏览我的数据框,如果两列的值等于某值,那么我将在该位置更改一个值,这是我一直在使用的循环的简化版本(我更改了if / else函数的值,因为原始函数使用了正则表达式和东西,而且非常复杂):

pro_cr = ["IgA", "IgG", "IgE"] # CR's considered productive
rows_changed = 0
prod_to_unk = 0
unk_to_prod = 0

changed_ids = []

for index in df_sample.index:
    if num=1 and color="red":
        pass
    elif num=2 and color="blue":
        prod_to_unk += 1
        changed_ids.append(df_sample.loc[index, "Sequence ID"])
        df_sample.at[index, "Functionality"] = "unknown"
        rows_changed += 1
    elif num=3 and color="green":
        unk_to_prod += 1
        changed_ids.append(df_sample.loc[index, "Sequence ID"])
        df_sample.at[index, "Functionality"] = "productive"
        rows_changed += 1
    else:
        pass

print("Number of productive columns changed to unknown: {}".format(prod_to_unk))
print("Number of unknown columns changed to productive: {}".format(unk_to_prod))
print("Total number of rows changed: {}".format(rows_changed))

所以主要的问题是更改代码:

df_sample.at[index, "Functionality"] = "unknown" # or productive

如果我在没有这些代码行的情况下运行此代码,它将正常工作,它将找到所有正确的位置,并告诉我已更改了多少个位置以及它们的ID是什么,我可以使用它们与CSV文件进行验证。

如果我使用df_sample["Functionality"][index] = "unknown" # or productive,则代码会运行,但是检查已更改的行会发现它们根本没有更改。

当我使用df.at[row, column] = value时,出现“ AttributeError:'BlockManager'对象没有属性'T'”

我不知道为什么会这样。没有重复的列。希望这很清楚(如果不能让我知道,我会尽力澄清)。谢谢!

2 个答案:

答案 0 :(得分:1)

说实话,我从未使用过df.at-而是尝试使用df.loc

df_sample.loc[index, "Functionality"] = "unknown"

答案 1 :(得分:0)

您也可以保持健康。

示例:df.iat [iTH行,jTH列]