Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在DataFrame中拾取具有iterable中某个值的行_Python_Pandas - Fatal编程技术网

Python 在DataFrame中拾取具有iterable中某个值的行

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

我有一个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.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,这为我解决了这个问题!感谢您的帮助,这不仅是一个简洁的解决方案,而且是一个更广泛、更易懂的解决方案!