正在尝试更新datafram

2024-09-30 01:24:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧(df),它看起来像:

0   1                   2                       3
0   BBG.apples.S        BBG.XNGS.bananas.S      0
1   BBG.apples.S        BBG.XNGS.oranges.S      0
2   BBG.apples.S        BBG.XNGS.pairs.S        0
3   BBG.apples.S        BBG.XNGS.mango.S        0
4   BBG.apples.S        BBG.XNYS.mango.S        0
5   BBG.XNGS.bananas.S  BBG.XNGS.oranges.S      0
6   BBG.XNGS.bananas.S  BBG.XNGS.pairs.S        0
7   BBG.XNGS.bananas.S  BBG.XNGS.kiwi.S         0
8   BBG.XNGS.oranges.S  BBG.XNGS.pairs.S        0
9   BBG.XNGS.oranges.S  BBG.XNGS.kiwi.S         0
10  BBG.XNGS.peaches.S  BBG.XNGS.strawberrys.S  0
11  BBG.XNGS.peaches.S  BBG.XNGS.strawberrys.S  0
12  BBG.XNGS.peaches.S  BBG.XNGS.strawberrys.S  0
13  BBG.XNGS.peaches.S  BBG.XNGS.kiwi.S         0

我正在尝试使用以下方法更新数据帧中的值(第一行,第三列):

for index, row in df.iterrows():

        status = row[3]

        if int(status) == 0:

            df[index]['3'] = 1

但当我打印出数据帧时,它保持不变

有人能告诉我我做错了什么吗?你知道吗

谢谢


Tags: 数据dfindexstatusrowkiwipairsoranges
3条回答

如果您正试图根据具有特定值的行更新所有行的第三列,如示例代码所示,那么在dataframe上使用where方法会容易得多:

df.loc[:,'3'] = df['3'].where(df['3']!=0, 1)

不能通过这样的迭代来修改数据帧。See here.

如果只想修改[1,3]处的元素,可以直接访问:

df[1, 3] = 1

如果要将第3列中的每个0都转换为1,请尝试以下操作:

df[df['3'] == 0] = 1

EDIT:另外,docs for ^{}表示您经常会得到一个副本,这就是操作失败的原因。你知道吗

将最后一行替换为:

df.at[index,'3'] = 1

显然,正如其他人提到的,最好使用向量化表达式,而不是迭代,尤其是对于大型数据帧。你知道吗

相关问题 更多 >

    热门问题