gpt4 book ai didi

python - Pandas :使用 .isin() 返回错误: "AttributeError: float' 对象没有属性 'isin'“

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:03 26 4
gpt4 key购买 nike

我正在使用 Pandas 和 Python 导入一个 CSV,并对导入的数据框中的数据进行操作,以便创建一个新列。

新列中的每一行都是基于 A 列和 B 列的每个对应行中的值生成的。数据框中有更多包含数据的列,但是这些与下面的代码无关。

导入的数据框有几千行。

A 列和 B 列均包含介于 0 和 99 之间(含)的数值。

将 pandas 导入为 pd

import csv

df = pd.read_csv("import.csv", names=["Id", "Month", "Name", "ColA", "ColB" ])

def f(row):
if row['colA'].isin([10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 48]) and row['colB'].isin([30, 31, 32, 33, 34, 35, 57, 58]):
val = row['ColA']
elif row['ColB'].isin([10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 48]) and row['ColA'].isin([30, 31, 32, 33, 34, 35, 57, 58]):
val = row['ColB']
elif row['ColA'] > row['ColB']:
val = row['ColA']
elif row['ColA'] < row['ColB']:
val = row['ColB']
else:
val = row['ColA']
return val

df['NewColumnName'] = df.apply(f, axis=1)

df.to_csv("export.csv", encoding='utf-8')

运行上面的代码返回错误:

AttributeError: ("'float' object has no attribute 'isin'", 'occurred at index 0')

显然 .isin() 不能以这种方式使用。关于如何解决这个问题有什么建议吗?

编辑使用 Jezrael 的方法添加一个适用相同条件的列,我猜代码如下所示:

m1 = (df['colA'].isin(L1) & df['colB'].isin(L2)) | (df['ColA'] > df['ColB'])
m2 = (df['colB'].isin(L1) & df['colA'].isin(L2)) | (df['ColA'] < df['ColB'])
m3 = (df['colC'].isin(L1) & df['colB'].isin(L2)) | (df['ColC'] > df['ColB'])
m4 = (df['colB'].isin(L1) & df['colC'].isin(L2)) | (df['ColC'] < df['ColB'])
m5 = (df['colC'].isin(L1) & df['colA'].isin(L2)) | (df['ColC'] > df['ColA'])
m6 = (df['colA'].isin(L1) & df['colC'].isin(L2)) | (df['ColC'] < df['ColA'])



df['NewColumnName'] = np.select([m1, m2, m3, m4, m5, m6], [df['ColA'], df['ColB'], df['ColC'], df['ColA'], df['ColB'], df['ColC'],], default=df['ColA'])

最佳答案

在 pandas 中最好的是避免循环,所以更好的是使用 numpy.select&AND|OR 的链条件:

L1 = [10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 48]
L2 = [30, 31, 32, 33, 34, 35, 57, 58]

m1 = (df['colA'].isin(L1) & df['colB'].isin(L2)) | (df['ColA'] > df['ColB'])
m2 = (df['colB'].isin(L1) & df['colA'].isin(L2)) | (df['ColA'] < df['ColB'])

df['NewColumnName'] = np.select([m1, m2], [df['ColA'], df['ColB']], default=df['ColA'])

关于python - Pandas :使用 .isin() 返回错误: "AttributeError: float' 对象没有属性 'isin'“,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48852855/

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