为什么我的列表在保存到 csv 并重新打开后变成字符串? Python
Why do my lists become strings after saving to csv and re-opening? Python
我有一个 Dataframe,其中每一行都包含一个句子,后跟一个词性标签列表,使用 spaCy 创建:
df.head()
question POS_tags
0 A title for my ... [DT, NN, IN,...]
1 If one of the ... [IN, CD, IN,...]
当我将 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',...]
当我现在尝试使用 POS 标签进行一些操作时,结果发现它们不再是列表,而是变成了甚至包括引号的字符串。它们看起来仍然像列表,但不是。做的时候就清楚了:
q = df['POS_tags']
q = list(q)
print(q)
这导致:
["['DT', 'NN', 'IN']"]
这是怎么回事?
我要么希望“POS_tags”列包含列表,即使在保存到 csv 并重新打开之后也是如此。或者我想对列 'POS_tags' 进行操作,以再次获得与 SpaCy 最初创建的列表相同的列表。有什么建议如何做到这一点?
为了保留 DataFrame 的确切结构,一个简单的解决方案是使用 pd.to_pickle
以 pickle 格式序列化 DF,而不是使用 csv
,这将始终丢弃有关数据的所有信息类型,并且在 re-import 之后需要手动重建。 pickle 的缺点之一是它不是 human-readable.
# 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')
从 CSV 导入后修复列表
如果您已经从 CSV 导入,这应该将 POS_tags
列从字符串转换为 python 列表:
from ast import literal_eval
df['POS_tags'] = df['POS_tags'].apply(literal_eval)
我有一个 Dataframe,其中每一行都包含一个句子,后跟一个词性标签列表,使用 spaCy 创建:
df.head()
question POS_tags
0 A title for my ... [DT, NN, IN,...]
1 If one of the ... [IN, CD, IN,...]
当我将 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',...]
当我现在尝试使用 POS 标签进行一些操作时,结果发现它们不再是列表,而是变成了甚至包括引号的字符串。它们看起来仍然像列表,但不是。做的时候就清楚了:
q = df['POS_tags']
q = list(q)
print(q)
这导致:
["['DT', 'NN', 'IN']"]
这是怎么回事?
我要么希望“POS_tags”列包含列表,即使在保存到 csv 并重新打开之后也是如此。或者我想对列 'POS_tags' 进行操作,以再次获得与 SpaCy 最初创建的列表相同的列表。有什么建议如何做到这一点?
为了保留 DataFrame 的确切结构,一个简单的解决方案是使用 pd.to_pickle
以 pickle 格式序列化 DF,而不是使用 csv
,这将始终丢弃有关数据的所有信息类型,并且在 re-import 之后需要手动重建。 pickle 的缺点之一是它不是 human-readable.
# 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')
从 CSV 导入后修复列表
如果您已经从 CSV 导入,这应该将 POS_tags
列从字符串转换为 python 列表:
from ast import literal_eval
df['POS_tags'] = df['POS_tags'].apply(literal_eval)