gpt4 book ai didi

python - 使用整数行和标签列修改 pandas DataFrame 中的单个值

转载 作者:行者123 更新时间:2023-12-04 03:23:34 24 4
gpt4 key购买 nike

我想修改 DataFrame 中的单个值。这样做的典型建议是使用 df.at[] 并将位置引用为索引标签和列标签,或者使用 df.iat[] 并将位置引用为整数行和整数列。但我想将该位置引用为整数行和列标签。

假设这个 DataFrame:

<表类="s-表"><头>日期索引苹果橘子香蕉<正文>2021-01-01 14:00:01.3846241X32021-01-05 13:43:26.2037734562021-01-31 08:23:29.8372387892021-02-08 10:23:09.095632012
data = [{'apples':1, 'oranges':'X', 'bananas':3},
{'apples':4, 'oranges':5, 'bananas':6},
{'apples':7, 'oranges':8, 'bananas':9},
{'apples':0, 'oranges':1, 'bananas':2}]
indexes = [pd.to_datetime('2021-01-01 14:00:01.384624'),
pd.to_datetime('2021-01-05 13:43:26.203773'),
pd.to_datetime('2021-01-31 08:23:29.837238'),
pd.to_datetime('2021-02-08 10:23:09.095632')]
idx = pd.Index(indexes, name='dateindex')
df = pd.DataFrame(data, index=idx)

我想将值“X”更改为“2”。我不知道确切的时间;我只知道这是第一行。但我知道我想更改“橘子”列。

我想做类似df.at[0,'oranges']的事情,但我做不到;我得到一个 KeyError

我能想到的最好的事情是做 df.at[df.index[0],'oranges'],但是当他们离开他们的时候这看起来很尴尬提供按标签和按整数偏移接口(interface)的方法。 这是最好的事情吗?

最佳答案

The best thing that I can figure out is to do df.at[df.index[0],'oranges'], but that seems so awkward when they've gone out of their way to provide both by-label and by-integer-offset interfaces. Is that the best thing?

是的,是的。我同意,这很尴尬。 The old .ix用于更好地支持这些混合索引情况,但其行为取决于轴的 dtype,使其不一致。同时...

已在其他答案中使用的其他选项可以全部发出SettingWithCopy 警告。不能保证会提出问题,但它可能会提出问题,具体取决于索引标准是什么以及如何分配值。

引用 Combining positional and label-based indexing并以此 df 开始,它以 dateindex 作为索引:

                             apples oranges  bananas
dateindex
2021-01-01 14:00:01.384624 1 X 3
2021-01-05 13:43:26.203773 4 5 6
2021-01-31 08:23:29.837238 7 8 9
2021-02-08 10:23:09.095632 0 1 2

同时使用这两个选项:

  1. 使用 .loc.at:
    df.at[df.index[0], 'oranges'] = -50
                                 apples oranges  bananas
    dateindex
    2021-01-01 14:00:01.384624 1 -50 3
    2021-01-05 13:43:26.203773 4 5 6
    2021-01-31 08:23:29.837238 7 8 9
    2021-02-08 10:23:09.095632 0 1 2
  2. 使用 .iloc.iat:
    df.iat[0, df.columns.get_loc('oranges')] = -20
                                 apples oranges  bananas
    dateindex
    2021-01-01 14:00:01.384624 1 -20 3
    2021-01-05 13:43:26.203773 4 5 6
    2021-01-31 08:23:29.837238 7 8 9
    2021-02-08 10:23:09.095632 0 1 2

FWIW,我发现方法 #1 更一致,因为它可以处理多个行索引而无需更改所使用的函数/方法:df.loc[df.index[[0, 2]], 'oranges'] 但当有多个列时,方法 #2 需要不同的列索引器:df.iloc[[0, 2], df.columns.get_indexer(['oranges', 'bananas'])].

关于python - 使用整数行和标签列修改 pandas DataFrame 中的单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68075790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com