twh*_*ale 3 python-3.x export-to-csv pandas spacy
我有一个 Dataframe,其中每行包含一个句子,后跟一个用 spaCy 创建的词性标签列表:
df.head()
question POS_tags
0 A title for my ... [DT, NN, IN,...]
1 If one of the ... [IN, CD, IN,...]
Run Code Online (Sandbox Code Playgroud)
当我将 DataFrame 写入 csv 文件(encoding='utf-8')并重新打开它时,看起来数据格式已更改,POS 标签现在出现在引号 ' ' 之间,如下所示:
df.head()
question POS_tags
0 A title for my ... ['DT', 'NN', 'IN',...]
1 If one of the ... ['IN', 'CD', 'IN',...]
Run Code Online (Sandbox Code Playgroud)
当我现在尝试使用 POS 标签进行某些操作时,结果发现它们不再是列表,而是变成了甚至包含引号的字符串。它们看起来仍然像列表,但事实并非如此。这样做时这一点很清楚:
q = df['POS_tags']
q = list(q)
print(q)
Run Code Online (Sandbox Code Playgroud)
结果是:
["['DT', 'NN', 'IN']"]
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
我要么希望“ POS_tags ”列包含列表,即使在保存到 csv 并重新打开之后也是如此。或者我想对“ POS_tags ”列进行操作,以再次获得 SpaCy 最初创建的相同列表。有什么建议如何做到这一点?
为了保留 DataFrame 的精确结构,一个简单的解决方案是使用pd.to_pickle, 而不是使用csv,以 pickle 格式序列化 DF,这将始终丢弃有关数据类型的所有信息,并且在重新导入后需要手动重建。pickle 的一个缺点是它不可读。
# Save to pickle
df.to_pickle('pickle-file.pkl')
# Save with compression
df.to_pickle('pickle-file.pkl.gz', compression='gzip')
# Load pickle from disk
df = pd.read_pickle('pickle-file.pkl') # or...
df = pd.read_pickle('pickle-file.pkl.gz', compression='gzip')
Run Code Online (Sandbox Code Playgroud)
如果您已经从 CSV 导入,这应该将该POS_tags列从字符串转换为 Python 列表:
from ast import literal_eval
df['POS_tags'] = df['POS_tags'].apply(literal_eval)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2555 次 |
| 最近记录: |