繁体   English   中英

检查单元格是否包含字母的最快方法是什么?

[英]What is the fastest way to check whether a cell contains letters?

我有一个包含260万行的数据集,其中有一个名为msgText列,其中包含书面消息。

现在,我想过滤掉所有不包含字母的邮件。 为此,我找到了以下代码:

dataset = dataset[dataset['msgText'].astype(str).str.contains('[A-Za-z]')]

但是,在16个小时后,代码仍在运行。

此外,基于Python是否具有字符串“包含”子字符串方法? 我考虑过创建一个长度为26的列表,该列表包含字母表中的所有字母,然后检查每个单元格是否包含该字母。 但这似乎也不有效。

因此,我想知道是否有更快的方法来查找单元格是否包含字母。


编辑:上面的代码效果很好。 显然,我在(慢速)代码中的内容是: dataset['msgText'] = dataset[dataset['msgText'].astype(str).str.contains('[A-Za-z]')]

import pandas

dataset['columnName'].apply(lambda x: x.find('\\w') > 0)

您可以使用numpy的isalpha()方法。 (据估计,脾气要比熊猫快)

df = pd.DataFrame({'msgText': ['a', 'b', 'g', '1']})
column = df['msgText']
column[column.str.replace(' ','').str.isalpha()]

将返回:

0    a
1    b
2    g
Name: msgText, dtype: object

具有260万行的测试用例:

导入日期时间

df = pd.DataFrame({'msgText': ['a', 'b', 'g', '1']*2600000})
column = df['msgText']
start = datetime.datetime.now()
new_col = column[column.str.replace(' ','').str.isalpha()]
end = datetime.datetime.now()
print(f'Time taken: {end - start}; Shape: {new_col.shape}')

OUTPUT:
Time taken: 0:00:06.144576; Shape: (7800000,)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM