在 pandas.DataFrame 中使用 "in" 运算符而不会出现“模棱两可的错误
Using the "in" operator in pandas.DataFrame without getting "ambiguous error
我有一个pd.DataFrame
import pandas as pd
country = ['US', 'US', 'US', 'UK', 'UK', 'UK']
year = ['1990', '1991', '2020', '1990', '1991', '2020']
people = [20, 34, 456, 5, 7, 300]
df = pd.DataFrame(zip(country, year, people), columns = ['country', 'year', 'people'])
country year people
0 US 1990 20
1 US 1991 34
2 US 2020 456
3 UK 1990 5
4 UK 1991 7
5 UK 2020 300
我希望找到年份“2020”和“1990”。
我知道这可以通过以下方式实现:
df.loc[(df.year == '2020') | (df.year == '1990')]
或
df.query('year == [\'2020\', \'1990\']')
获取输出:
country year people
0 US 1990 20
2 US 2020 456
3 UK 1990 5
5 UK 2020 300
但是,我想用 in
运算符执行此 'query'。
正在尝试:
df.loc[df['year'] in ['2020', '1990']]
引发错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我希望在我的 pandas.DataFrame
子集中使用 in
运算符,因为它需要最少的输入。
减轻 in
运算符引发的此错误的最佳方法是什么?
df[df['year'].isin(['1990','2020'])]
或
df.loc[df['year'].isin(['1990','2020'])]
使用 .isin() 函数。
df.loc[df['year'].isin(['1990','2020'])]
您输入您希望 'year' 成为的选项列表,pandas 将 return 一系列布尔值。该系列将依次由 .loc() 解释为 return 只有 df['year'] == 所需值的行。
我有一个pd.DataFrame
import pandas as pd
country = ['US', 'US', 'US', 'UK', 'UK', 'UK']
year = ['1990', '1991', '2020', '1990', '1991', '2020']
people = [20, 34, 456, 5, 7, 300]
df = pd.DataFrame(zip(country, year, people), columns = ['country', 'year', 'people'])
country year people
0 US 1990 20
1 US 1991 34
2 US 2020 456
3 UK 1990 5
4 UK 1991 7
5 UK 2020 300
我希望找到年份“2020”和“1990”。 我知道这可以通过以下方式实现:
df.loc[(df.year == '2020') | (df.year == '1990')]
或
df.query('year == [\'2020\', \'1990\']')
获取输出:
country year people
0 US 1990 20
2 US 2020 456
3 UK 1990 5
5 UK 2020 300
但是,我想用 in
运算符执行此 'query'。
正在尝试:
df.loc[df['year'] in ['2020', '1990']]
引发错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我希望在我的 pandas.DataFrame
子集中使用 in
运算符,因为它需要最少的输入。
减轻 in
运算符引发的此错误的最佳方法是什么?
df[df['year'].isin(['1990','2020'])]
或
df.loc[df['year'].isin(['1990','2020'])]
使用 .isin() 函数。
df.loc[df['year'].isin(['1990','2020'])]
您输入您希望 'year' 成为的选项列表,pandas 将 return 一系列布尔值。该系列将依次由 .loc() 解释为 return 只有 df['year'] == 所需值的行。