1 回答

TA貢獻1828條經驗 獲得超3個贊
仔細閱讀錯誤信息:
ValueError:值的長度與索引的長度不匹配
在這種情況下,“值”是右邊的東西=:
values = [word for new in data['new'] for word in new if word not in stopwords]
本例中的“索引”是 DataFrame 的行索引:
index = data.index
這里index的行數始終與 DataFrame 本身的行數相同。
問題是values對于index- 即它們對于 DataFrame 來說太長了。如果你檢查你的代碼,這應該是顯而易見的。如果您仍然看不到問題,請嘗試以下操作:
data['text_tokenized'] = [word_tokenize(row) for row in data['text']]
values = [word for new in data['text_tokenized'] for word in new if word not in stopwords]
print('N rows:', data.shape[0])
print('N new values:', len(values))
至于如何解決問題——這完全取決于您要達到的目標。一種選擇是“分解”數據(還要注意使用.map而不是列表理解):
data['text_tokenized'] = data['text'].map(word_tokenize)
# Flatten the token lists without a nested list comprehension
tokens_flat = data['text_tokenized'].explode()
# Join your labels w/ your flattened tokens, if desired
data_flat = data[['label']].join(tokens_flat)
# Add a 2nd index level to track token appearance order,
# might make your life easier
data_flat['token_id'] = data.groupby(level=0).cumcount()
data_flat = data_flat.set_index('token_id', append=True)
作為一個不相關的提示,您可以通過僅加載您需要的列來提高 CSV 處理的效率,如下所示:
data = pd.read_csv(r"D:/python projects/read_files/spam.csv",
encoding="latin-1",
usecols=["v1", "v2"])
添加回答
舉報