【发布时间】:2018-06-20 09:17:12
【问题描述】:
我有一个 pandas 数据框,其中“genres”列有多个由 “|” 分隔的值。我在下面放了一张图片。
包含电影细节的数据框:
如果我使用 split 函数,它将被转换为一个不可散列的列表。
现在我只想在 "genres" 中包含 "Action" 字样时选择数据框的行?我该怎么做?
提前致谢。
【问题讨论】:
标签: python pandas dataframe series
我有一个 pandas 数据框,其中“genres”列有多个由 “|” 分隔的值。我在下面放了一张图片。
包含电影细节的数据框:
如果我使用 split 函数,它将被转换为一个不可散列的列表。
现在我只想在 "genres" 中包含 "Action" 字样时选择数据框的行?我该怎么做?
提前致谢。
【问题讨论】:
标签: python pandas dataframe series
这是使用set 的一种解决方案:
df = pd.DataFrame({'genres': ['A|B|C|D', 'A|B|C', 'B|D']})
res = df[df['genres'].str.split('|').apply(set) >= {'D'}]
print(res)
genres
0 A|B|C|D
2 B|D
这可以自然地扩展到多种流派:
res = df[df['genres'].str.split('|').apply(set) >= {'A', 'B'}]
print(res)
genres
0 A|B|C|D
1 A|B|C
【讨论】:
你可以用这个:
df = df[df['genres'].str.contains("Action")]
例子:
df = {'genres' : ('Action', 'crime', 'Action|crime', 'Romance|Action', 'Comedy'),'runtime' : (1,3,5,6,7)}
df = pd.DataFrame(df)
输出:
genres runtime
0 Action 1
2 Action|crime 5
3 Romance|Action 6
【讨论】:
df = df[df['genres'].str.contains('|'.join(["Action","Adventure"])