我有一个DataFrame,其中一列包含一个字符串,其中包含用逗号分隔的单词。
>>> df['column1']
# ....
996 str1, str2, str3
997 str4, str5, str7
998 str8, str9, str10
# ...........
我需要将该列的内容视为字符串数组,以便我可以这样做:
[
# .....
& (df['column1'].isin('str2')) # should return the row #996
# ....
]
我试过了,但当然没有淘汰:
[
# .....
& (df['column1'].split(',').isin('str2'))
# ....
]
我该怎么做?或者更确切地说,如何在过滤之前使用方法(lambda)来修改列的内容?
UPDATE1:
这是我的代码的一部分:
for x in pd.read_csv.....
df_item = x
if filter1:
df_item = df_item[(df_item['column1'] == filter1)]
if filter2:
df_item = df_item[(df_item['column2'].isin(subjects))]
# .....
如何将df['column2'].apply(lambda x: 'str2' in x.split(','))
应用于
if filter2:
df_item = df_item[(df_item['column2'].isin(subjects))]
答案 0 :(得分:7)
isin
检查系列中的值是否在iterable中(在您的情况下为'str2'
)。不是您的系列中是否包含str2
'值。
如果您的系列包含字符串,那么获得所需内容的方法是使用.str.contains()
检查字符串是否包含str2
。示例 -
df['column1'].str.contains('str2')
如果必须拆分内容,请使用','
(即如果str2
可以是任何其他字符串的子字符串)。您可以使用Series.apply
。示例 -
df['column1'].apply(lambda x: 'str2' in x.split(','))
要应用此功能,只需使用此功能过滤DataFrame即可。示例 -
if <somefilter>:
df_item = df_item[df_item['column2'].apply(lambda x: 'str2' in x.split(','))]