Вероятно, в вашем фактическом df['TEXT']
есть объект, не похожий на строку (например, NaN
), который не отображается в опубликованных вами данных.
Вот как вы можете это сделатьнайдите проблемные значения:
mask = [isinstance(item, (str, bytes)) for item in df['TEXT']]
print(df.loc[~mask])
Если вы хотите удалить эти строки, вы можете использовать
df = df.loc[mask]
или , так как PineNuts0 указывает на , весь столбецможет быть приведен к str
dtype с использованием
df['TEXT'] = df['TEXT'].astype(str)
Например, если в df['TEXT']
,
import pandas as pd
from nltk.tokenize import sent_tokenize, word_tokenize
df = pd.DataFrame({'ID': [1, 2, 3, 4],
'TEXT': ['cat, dog fish',
'turtle; cat; fish fish',
'hello book fish',
np.nan]})
# ID TEXT
# 0 1 cat, dog fish
# 1 2 turtle; cat; fish fish
# 2 3 hello book fish
# 3 4 NaN
# df['TEXT'].apply(word_tokenize)
# TypeError: expected string or buffer
mask = [isinstance(item, (str, bytes)) for item in df['TEXT']]
df = df.loc[mask]
# ID TEXT
# 0 1 cat, dog fish
# 1 2 turtle; cat; fish fish
# 2 3 hello book fish
есть значение NaN и теперь применяется word_tokenize
, работает:
In [108]: df['TEXT'].apply(word_tokenize)
Out[108]:
0 [cat, ,, dog, fish]
1 [turtle, ;, cat, ;, fish, fish]
2 [hello, book, fish]
Name: TEXT, dtype: object