根据 DataFrame 列中的某些字符保留部分字符串
Keep part of string based on certain characters in a DataFrame column
我知道围绕这个主题有很多问题,但我没有找到任何描述我的问题的问题。我有一个 df
,其中的特定列如下所示:
colA
['drinks/coke/diet', 'food/spaghetti']
['drinks/water', 'drinks/tea', 'drinks/coke', 'food/pizza']
['drinks/coke/diet', 'drinks/coke']
...
colA
的值是字符串而不是列表。我想要实现的是一个新列,其中我只保留包含 'coke' 的部分值。 Coke 可以在字符串中重复任意次数,也可以出现在任意位置。 ''
之间的值并不总是包含由 /
.
分隔的相等数量的值
所以结果应该是这样的:
colA colB
['drinks/coke/diet', 'food/spaghetti'] 'drinks/coke/diet'
['drinks/water', 'drinks/tea', 'drinks/coke', 'food/pizza'] 'drinks/coke'
['drinks/coke/diet', 'drinks/coke'] 'drinks/coke/diet', 'drinks/coke'
...
我试过调用函数:
import json
df['coke'] = df['colA'].apply(lambda secties: [s for s in json.loads(colA) if 'coke' in s], meta=str)
但是这个一直抛出我不知道如何解决的错误。
您可以用逗号和 explode
分隔来创建一个系列。然后使用 str.contains
创建一个布尔掩码,您可以使用它来过滤包含单词“coke”的项目。最后 join
字符串返回索引:
s = df['colA'].str.split(',').explode()
df['colB'] = s[s.str.contains('coke')].groupby(level=0).apply(','.join).str.strip('[]')
输出:
colA colB
0 ['drinks/coke/diet', 'food/spaghetti'] 'drinks/coke/diet'
1 ['drinks/water', 'drinks/tea', 'drinks/coke', ... 'drinks/coke'
2 ['drinks/coke/diet', 'drinks/coke'] 'drinks/coke/diet', 'drinks/coke'
尝试将字符串拆分成一个列表,然后在列表中检查 coke,如下所示:
import json
df['coke'] = df['colA'].apply(lambda secties: [s for s in json.loads(colA.split("/")) if 'coke' in s], meta=str)
我知道围绕这个主题有很多问题,但我没有找到任何描述我的问题的问题。我有一个 df
,其中的特定列如下所示:
colA
['drinks/coke/diet', 'food/spaghetti']
['drinks/water', 'drinks/tea', 'drinks/coke', 'food/pizza']
['drinks/coke/diet', 'drinks/coke']
...
colA
的值是字符串而不是列表。我想要实现的是一个新列,其中我只保留包含 'coke' 的部分值。 Coke 可以在字符串中重复任意次数,也可以出现在任意位置。 ''
之间的值并不总是包含由 /
.
所以结果应该是这样的:
colA colB
['drinks/coke/diet', 'food/spaghetti'] 'drinks/coke/diet'
['drinks/water', 'drinks/tea', 'drinks/coke', 'food/pizza'] 'drinks/coke'
['drinks/coke/diet', 'drinks/coke'] 'drinks/coke/diet', 'drinks/coke'
...
我试过调用函数:
import json
df['coke'] = df['colA'].apply(lambda secties: [s for s in json.loads(colA) if 'coke' in s], meta=str)
但是这个一直抛出我不知道如何解决的错误。
您可以用逗号和 explode
分隔来创建一个系列。然后使用 str.contains
创建一个布尔掩码,您可以使用它来过滤包含单词“coke”的项目。最后 join
字符串返回索引:
s = df['colA'].str.split(',').explode()
df['colB'] = s[s.str.contains('coke')].groupby(level=0).apply(','.join).str.strip('[]')
输出:
colA colB
0 ['drinks/coke/diet', 'food/spaghetti'] 'drinks/coke/diet'
1 ['drinks/water', 'drinks/tea', 'drinks/coke', ... 'drinks/coke'
2 ['drinks/coke/diet', 'drinks/coke'] 'drinks/coke/diet', 'drinks/coke'
尝试将字符串拆分成一个列表,然后在列表中检查 coke,如下所示:
import json
df['coke'] = df['colA'].apply(lambda secties: [s for s in json.loads(colA.split("/")) if 'coke' in s], meta=str)