Python Pandas:Using.isin()返回错误:";AttributeError:float';对象没有属性';isin'&引用;

Python Pandas:Using.isin()返回错误:";AttributeError:float';对象没有属性';isin'&引用;,python,pandas,csv,dataframe,Python,Pandas,Csv,Dataframe,我正在使用Pandas和Python导入CSV,导入的数据框中的数据将被处理,以便生成一个新列 新列中的每一行都是基于列A和列B的每一对应行中的值生成的。 dataframe中有更多包含数据的列,但是这些列与下面的代码无关 导入的数据帧有数千行 列A和列B都包含介于0和99之间的数值 作为pd进口熊猫 import csv df = pd.read_csv("import.csv", names=["Id", "Month", "Name", "ColA", "ColB" ]) def f(

我正在使用Pandas和Python导入CSV,导入的数据框中的数据将被处理,以便生成一个新列

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

导入的数据帧有数千行

列A和列B都包含介于0和99之间的数值

作为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')
显然,不能以这种方式使用.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'])
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']))
m4=(df['colB'].isin(L1)和df['colC'].isin(L2))|(df['colC']df['colA']))
m6=(df['colA'].isin(L1)和df['colC'].isin(L2))|(df['colC']
在熊猫中,最好是避免循环,因此对于
使用和链接条件更好:

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'])
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']
在熊猫中,最好是避免循环,因此对于
使用和链接条件更好:

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'])
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[df['ColA'].isin([10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 48])]
这将为您提供
ColA
值位于上述列表中的行。您正在尝试按值执行此操作,但此方法适用于整个列。如果要查看此列表中是否有一个值,则可以使用numpy在函数中编写类似的内容:

if np.any(row['colA'] == [10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 48]):
   val = row['ColA']

您需要像这样使用它:

df[df['ColA'].isin([10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 48])]
这将为您提供
ColA
值位于上述列表中的行。您正在尝试按值执行此操作,但此方法适用于整个列。如果要查看此列表中是否有一个值,则可以使用numpy在函数中编写类似的内容:

if np.any(row['colA'] == [10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 48]):
   val = row['ColA']

优雅的解决方案。我假设当colA中的值等于ColB中的值时,选择了colA中的值(从代码中显示:default=df['colA'])?@borooooooooooooooo-不,如果没有条件匹配,它是默认值,如果要添加列,它的逻辑与
else:val=row['colA']
相同,假设ColC和具有相同条件。添加以下内容是正确的:添加以下内容是正确的:添加以下内容是正确的:添加以下内容是正确的:添加以下内容是正确的:添加以下内容是正确的:添加以下内容是正确的:加上::::'m3=(df['colC').isin(L1)和(L1)和(df['colB'colB').isin(L1)和(L1)和(L1)和(L1)和(L1)和df(以及以及(L1)和df[以及[[[[[colB['colB['colB'colB'colB'colB'))))。isin(isin.isin.isin(L1)和(L1)和(L1)和(L1)和(L1)和(L1)和(L1)和(L1)和(L1)和(L1)和(L1)和(L[[[[[[[[[[[[[[[[[[[[[[|(df['colC']df['NewColumnName']=np.选择([m1 | m4,m2 |,m3 | ColA'],df['ColA'],df['ColA'],df['ColA'],df['ColA'],df['ColA'],df['ColA'],df['ColA']),default]]!这很有趣,似乎比在唱诗班部分重复“df['ColX']”要好。在这里,我们可以说条件列表中的逗号和|对最终结果的影响与我假设的相同。优雅的解决方案。我假设当colA中的值等于ColB中的值时,选择了colA中的值(从代码中显示:default=df['colA'])?@borooooooooooooooo-不,如果没有条件匹配,它是默认值,如果要添加列,它的逻辑与
else:val=row['colA']
相同,假设ColC和具有相同条件。添加以下内容是正确的:添加以下内容是正确的:添加以下内容是正确的:添加以下内容是正确的:添加以下内容是正确的:添加以下内容是正确的:添加以下内容是正确的:加上::::'m3=(df['colC').isin(L1)和(L1)和(df['colB'colB').isin(L1)和(L1)和(L1)和(L1)和(L1)和df(以及以及(L1)和df[以及[[[[[colB['colB['colB'colB'colB'colB'))))。isin(isin.isin.isin(L1)和(L1)和(L1)和(L1)和(L1)和(L1)和(L1)和(L1)和(L1)和(L1)和(L1)和(L[[[[[[[[[[[[[[[[[[[[[[|(df['colC']df['NewColumnName']=np.选择([m1 | m4,m2 |,m3 | ColA'],df['ColA'],df['ColA'],df['ColA'],df['ColA'],df['ColA'],df['ColA'],df['ColA']),default]]!这很有趣,似乎比在唱诗班部分重复“df['ColX']”要好。在这里,我们可以说条件列表中的逗号和|不会以不同的方式影响最终结果。