python - 从数据框中删除特殊字符和字母数字的简单方法

标签 python regex pandas dataframe data-cleaning

我有一个包含 x 行和 y 列的大型数据集。其中一列作为单词和一些不需要的数据。不需要的数据没有特定的模式,因此我发现很难从数据框中删除它。

nonhashtag
['want', 'better', 'than', 'Dhabi,', 'United', 'Arab', 'Emirates']
['Just', 'posted', 'photo', 'Rasim', 'Villa']
['Dhabi', 'International', 'Airport', '(AUH)', '\xd9\x85\xd8\xb7\xd8\xa7\xd8\xb1', '\xd8\xa3\xd8\xa8\xd9\x88', '\xd8\xb8\xd8\xa8\xd9\x8a', '\xd8\xa7\xd9\x84\xd8\xaf\xd9\x88\xd9\x84\xd9\x8a', 'Dhabi']
['just', 'shrug', 'off!', 'Dubai', 'Mall', 'Burj', 'Khalifa']
['out!', 'Cowboy', 'steppin', 'Notorious', 'going', 'sleep!', 'Make', 'happen']
['Buona', 'notte', '\xd1\x81\xd0\xbf\xd0\xbe\xd0\xba\xd0\xbe\xd0\xb9\xd0\xbd\xd0\xbe\xd0\xb9', '\xd0\xbd\xd0\xbe\xd1\x87\xd0\xb8', '\xd9\x84\xd9\x8a\xd9\x84\xd8\xa9', '\xd8\xb3\xd8\xb9\xd9\x8a\xd8\xaf\xd8\xa9!', '\xd8\xa3\xd8\xa8\xd9\x88', '\xd8\xb8\xd8\xa8\xd9\x8a', 'Viceroy', 'Hotel,', 'Yas\xe2\x80\xa6']

每个不是单词的字符都将被删除,这只是大型数据集中的一列。列名是 nonhashtag

清洗色谱柱的简单方法是什么。立即删除它们或替换为 NAN

预期输出

nonhashtag
    ['want', 'better', 'than', 'Dhabi,', 'United', 'Arab', 'Emirates']
    ['Just', 'posted', 'photo', 'Rasim', 'Villa']
    ['Dhabi', 'International', 'Airport', '(AUH)', 'Dhabi']
    ['just', 'shrug', 'off!', 'Dubai', 'Mall', 'Burj', 'Khalifa']
    ['out!', 'Cowboy', 'steppin', 'Notorious', 'going', 'sleep!', 'Make', 'happen']
    ['Buona', 'notte', 'Viceroy', 'Hotel,']

每个 [] 都是该特定列中的一行,因此只需要删除 \x 和剩余的字符 空的 []应该留在行中。保留该行很重要,因为其他列的该行充满了所需的信息。

为了编写正确的代码,我无法通过输入读取,因为我无法在数据集中找到用于编写正则表达式的模式。

在此先感谢您的帮助

最佳答案

这是你想要的吗?

In [71]: df.nonhashtag.apply(' '.join).str.replace('[^A-Za-z\s]+', '') \
           .str.split(expand=False)
Out[71]:
0    [want, better, than, Dhabi, United, Arab, Emir...
1                  [Just, posted, photo, Rasim, Villa]
2          [Dhabi, International, Airport, AUH, Dhabi]
3       [just, shrug, off, Dubai, Mall, Burj, Khalifa]
4    [out, Cowboy, steppin, Notorious, going, sleep...
5                  [Buona, notte, Viceroy, Hotel, Yas]
Name: nonhashtag, dtype: object

'[^A-Za-z\s]+' - 是一个正则表达式,意思是取所有字符除了那些:

  • 用ASCII码从AZ
  • az
  • 空格和制表符

因此 .str.replace('[^A-Za-z\s]+', '') 将删除除属于英文字母、空格和制表符的字母以外的所有字符

关于python - 从数据框中删除特殊字符和字母数字的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44009113/

相关文章:

javascript - 如何忽略由句号、升级或问号结尾的句子组成的文本中的 .com .net 或 .org 成句子数组?

regex - 如何使用 Groovy 的正则表达式获取部分匹配的 bool 值?

python Pandas 。如何将特定行的提取结果更新到原特定行的其他列?

Python:如何解释 np.argmax() 的结果?

python - 我们如何在 python 中使用 ms office communicator 客户端公开的 API,这可能吗?

html - django 将 html href 和 src 替换为 {% static %} 标签

python - 将 MultiIndex Pandas Dataframe 乘以另一个数据帧中的多个标量

python - Numpy 尽可能将字符串转换为 float

python - 使用 Python Paramiko 通过 SSH 将输入/变量传递给命令/脚本

python - 使用循环创建 Pandas Dataframe