Python Pandas:Using.isin()返回错误:";AttributeError:float';对象没有属性';isin'&引用;
我正在使用Pandas和Python导入CSV,导入的数据框中的数据将被处理,以便生成一个新列 新列中的每一行都是基于列A和列B的每一对应行中的值生成的。 dataframe中有更多包含数据的列,但是这些列与下面的代码无关 导入的数据帧有数千行 列A和列B都包含介于0和99之间的数值 作为pd进口熊猫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(
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']”要好。在这里,我们可以说条件列表中的逗号和|不会以不同的方式影响最终结果。