python-3.x 如何在pandas中拆分一列没有空格的已定义字符串,例如,苹果橙到苹果橙?

r8xiu3jd  于 2023-05-08  发布在  Python
关注(0)|答案(1)|浏览(99)

我正在尝试用python编写一段代码,在pandas dataframe中拆分列值。该列将包含像appleorangemango这样的值,我希望将其拆分为apple orange mango。我将有一个大的独特的话,我将分裂对他们的一大套。
假设我有一个名为unique_fruits的 Dataframe :
| 独特水果|
| --------------|
| 芒果|
| 苹果|
| 橙子|
| 杏|
| 桃子|
另一个fruits的 Dataframe 没有空格,叫做my_fruits
| 我的水果|
| --------------|
| 芒果|
| |
| 杏子|
| 橘桃|
| 香蕉|
请注意,banana不在unique_fruits Dataframe 中。此外,有时列可以包含空格,如orangemango peach。最后,该列可以是单个水果或空白,如my_fruits的第一行和第二行。
我打算读取一个excel文件并将其保存到dataframe。然后,尝试找出模式,我可以根据他们分裂。如果我发现了新的东西,那么我会得到一个未知单词的列表。我将手动添加未知单词的新拆分版本,然后重复,直到我觉得一切都很完美或几乎完美。
未知词的一个例子是bananastrawberrybananastrawberry都是新的未知单词,我将添加到unique_fruits Dataframe 中,然后重新运行代码。
如果我有pineapplepineapple添加到unique_fruits,那么我更喜欢它作为pineapple。只有在unique_fruits中没有pineapple时,我才会拆分。

41zrol4v

41zrol4v1#

你可以在unique_fruits中创建一个正则表达式,元素按长度降序排序,使得较长的水果排在第一位(这将优先匹配pineapple,而不是pineapple),然后用它拆分my_fruits中的字符串,然后用空格将它们重新连接起来:

uf = df1['unique_fruits'].to_list()
uf.sort(key=lambda v:-len(v))
# ['apricot', 'orange', 'mango', 'apple', 'peach']

regex = r'(' + '|'.join(list(map(re.escape, uf))) + r')|\s+'
# '(apricot|orange|mango|apple|peach)|\\s+'

df['my_fruits'] = df['my_fruits'].apply(lambda s:' '.join(filter(None, re.split(regex, s))))
#             my_fruits
# 0               mango
# 1       apricot apple
# 2  orange mango peach
# 3              banana

相关问题