Python 在DataFrame中拾取具有iterable中某个值的行
我有一个pandas数据框,我只想选择具有特定列的行,该列具有属于列表的任何值 我曾尝试通过Python 在DataFrame中拾取具有iterable中某个值的行,python,pandas,Python,Pandas,我有一个pandas数据框,我只想选择具有特定列的行,该列具有属于列表的任何值 我曾尝试通过where()直接实现它,但在尝试从数组比较中获取布尔值时,我遇到了一个典型错误: ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all() 我的代码: desired_values = (2,4,6,8) target_column = 'Target Column' df = pandas.read_csv(r'example.cs
where()
直接实现它,但在尝试从数组比较中获取布尔值时,我遇到了一个典型错误:
ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()
我的代码:
desired_values = (2,4,6,8)
target_column = 'Target Column'
df = pandas.read_csv(r'example.csv')
filtered_df = df.where(df[target_column] in desired_values).dropna()
虽然该代码有效:
filtered_df = df.where(df[target_column] == 2).dropna()
这也适用于:
#This outputs True as the first value is '4'
print(df[target_column][0] in desired_values)
因此,我认为panda的
where()
选择每一行并测试您对其施加的任何条件,这让我认为我的方法应该有效,因为对于每一行,您可以在编写时应用比较,并且使用=
进行测试效果良好。我做错了什么?为了简化这一点,您的where条件本身不起作用:
df[target_column] in desired_values
创建相同的ValueError。我建议使用函数
desired_values = (2,4,6,8)
target_column = 'Target Column'
df = pandas.read_csv(r'example.csv')
# Define a function to apply to each row
def filterit(row):
return row[target_column] in desired_values
# Get a true/false index from our filter function
idx = df.apply(filterit, axis=1)
filtered_df = df[idx]
这应该有助于解释这一点,这一点更为简洁:
filtered_df = df[df.apply(lambda x: x[target_column] in desired_values, axis=1)]
对不起,我把这个答案编辑了无数次。我的第一个答案不仅仅使用了提供的target_列。如果您回顾我的编辑,第一个解决方案将根据所需的值检查整个CSV/DF行,而不是仅检查target_column.Yup,这为我解决了这个问题!感谢您的帮助,这不仅是一个简洁的解决方案,而且是一个更广泛、更易懂的解决方案!