清理 Pandas 中的列 - 乱码
Cleaning a column in Pandas - Gibberish
目的:清理我的 pandas 数据框中的 OneCol 列。
我做了什么:我导入了 NLTK,运行 这段代码:
import nltk
import collections
from nltk.corpus import words
for value in df_US['OneCol']:
if value in words.words():
df_US['Result']=df_US['Result'].iloc.append(value)
我也试过这个:
#df_US['Result'] = df_US[['OneCol']].apply(lambda x: x.words.words())
没有成功!
我的数据是这样的:
谢谢,我很感激你能给我的任何建议。
让我们定义一个测试数据帧:
import numpy as np
import pandas as pd
df = pd.DataFrame({
'ID': [1,2,3, 4],
'Country': [2,2,2,2],
'Q1': ['', '', 'I like to CODE', ''],
'Q2': ['Good', 'xxxx', '', 'some gibberish text: jgsldkgnlk'],
'OneCol': ['good', 'xxxx', 'i like to code', 'some gibberish text: jgsldkgnlk']
})
df
这将给出以下数据框:
import nltk
import collections
from nltk.corpus import words
nltk.download('words')
df['Result'] = df['OneCol'].apply(lambda x: ' '.join(list(set(x.split()) & set(words.words()))))
df
这将给出以下结果(删除未知词):
如果您希望删除包含至少一个未知词的字段,可以使用以下方法:
df['Result'] = df['OneCol'].apply(lambda x: x if len(list(set(x.split()) & set(words.words()))) == len(set(x.split())) else None)
这将给出以下结果(如果包含未知单词,则删除该字段):
请注意,此逻辑不考虑标点符号。如果文本包含标点符号,标点符号旁边的单词将无法识别。
目的:清理我的 pandas 数据框中的 OneCol 列。 我做了什么:我导入了 NLTK,运行 这段代码:
import nltk
import collections
from nltk.corpus import words
for value in df_US['OneCol']:
if value in words.words():
df_US['Result']=df_US['Result'].iloc.append(value)
我也试过这个:
#df_US['Result'] = df_US[['OneCol']].apply(lambda x: x.words.words())
没有成功!
我的数据是这样的:
谢谢,我很感激你能给我的任何建议。
让我们定义一个测试数据帧:
import numpy as np
import pandas as pd
df = pd.DataFrame({
'ID': [1,2,3, 4],
'Country': [2,2,2,2],
'Q1': ['', '', 'I like to CODE', ''],
'Q2': ['Good', 'xxxx', '', 'some gibberish text: jgsldkgnlk'],
'OneCol': ['good', 'xxxx', 'i like to code', 'some gibberish text: jgsldkgnlk']
})
df
这将给出以下数据框:
import nltk
import collections
from nltk.corpus import words
nltk.download('words')
df['Result'] = df['OneCol'].apply(lambda x: ' '.join(list(set(x.split()) & set(words.words()))))
df
这将给出以下结果(删除未知词):
如果您希望删除包含至少一个未知词的字段,可以使用以下方法:
df['Result'] = df['OneCol'].apply(lambda x: x if len(list(set(x.split()) & set(words.words()))) == len(set(x.split())) else None)
这将给出以下结果(如果包含未知单词,则删除该字段):
请注意,此逻辑不考虑标点符号。如果文本包含标点符号,标点符号旁边的单词将无法识别。