gpt4 book ai didi

python - Pandas .at 抛出 ValueError : At based indexing on an integer index can only have integer indexers

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:14 54 4
gpt4 key购买 nike

所以我有一个 df,我在其中提取一个值以将其存储在另一个 df 中:

import pandas as pd

# Create data set
d = {'foo':[100, 111, 222],
'bar':[333, 444, 555]}
df = pd.DataFrame(d)

# Full dataframe:
print(df)

# Shows:
# bar foo
# 0 333 100
# 1 444 111
# 2 555 222

df2=pd.DataFrame()
df2.loc[1,'Name'] = df[df.foo == 222]['foo']

#error:
ValueError: Incompatible indexer with Series

我假设最后一行会抛出该错误,因为 df[df.foo == 222]['foo'] 是一个 Series:

2    222
Name: foo, dtype: int64

所以我正在尝试获取值本身。我使用了 .at 并得到了这个:

print(df[df.foo == 222].loc[:,'bar'].at['bar'])

#ValueError: At based indexing on an integer index can only have integer indexers

据我所知,iat 使用整数索引器,at 同时使用标签和整数,这是怎么回事?

最佳答案

at 与 bool 掩码一起使用被认为是错误的形式,除非您可以 100% 保证掩码中只有一行为真(否则,at 会失败)。

最好的办法是使用 loc 并取第一个结果。

df.loc[df.foo == 222, 'bar'].values[0]
555

作为引用,at 不起作用,因为返回一个索引为 [2] 的单行系列:

df[df.foo == 222].loc[:,'bar']

2 555
Name: bar, dtype: int64

此时,at['bar'] 没有意义,因为它在索引中搜索“bar”,而 bar 不是。你应该做的是

df[df.foo == 222].at[2, 'bar']
555

关于python - Pandas .at 抛出 ValueError : At based indexing on an integer index can only have integer indexers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53704552/

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