gpt4 book ai didi

python - 使用 Pandas 从字符串中删除所有字母数字单词

转载 作者:行者123 更新时间:2023-12-04 00:12:29 25 4
gpt4 key购买 nike

我有一个 pandas 数据框列,其中的字符串看起来像

'2fvRE-Ku89lkRVJ44QQFN ABACUS LABS, INC'

我想把它转换成样子

'ABACUS LABS, INC'.

我的代码:

list1 = data_df['Vendor'].str.split()
print(list1)
excludeList = list()
for y in list1:
if (any([x for x in y if x.isalpha()]) and any([x for x in y if x.isdigit()])) :
excludeList.append(y)
if y.isdigit() or len(y) == 1:
excludeList.append(y)
resList = [x for x in list1 if x not in excludeList]
print(restList)

但是它给了我一个错误

'list' object has no attribute 'isdigit'

谁能帮助我如何从字符串中删除字母数字单词并仅在我的 pandas 数据框列中保留文本部分?

最佳答案

您可以使用正则表达式来确保快速而优雅的解决方案:

df2 = df['Text'].str.findall(r'((?<=\s)[a-zA-Z,]+(?=\s|$))').agg(' '.join)

让我们分解一下:

  1. Regular expression只提取没有数字的单词。
  2. 根据 df['Text'] 的每个值提取正则表达式的匹配列表。
  3. 使用 ' '.join 函数聚合每个列表,该函数连接列表中的值,并在中间添加空格。

正则表达式正在这样做:

  • 要仅捕获位于字符串开头/结尾的“单词”,必须使用非捕获后视和前瞻(分别在字母捕获组之前和之后)。
  • lookahead 也将停止在字符串的末尾(而不是任何白色字符)。
  • “单词”中接受的字符定义为[a-zA-Z,],它允许字母小写和大写以及逗号。

性能

与@SeaBean 解决方案相比,我的机器上的时间差异是显着的(每 200 万条记录数据帧):

  • 我的:6.6522 秒
  • SeaBean 的:25.1773 秒(慢 3.79 倍)

与 SeaBean 相比,我的解决方案对内存的影响也较小,因为他正在创建额外的临时数据帧。

关于python - 使用 Pandas 从字符串中删除所有字母数字单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67923729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com