保存到csv并重新打开后,为什么我的列表会成为字符串?蟒蛇

时间:2018-03-30 20:26:11

标签: python-3.x pandas export-to-csv spacy

我有一个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标签现在出现在引号和#之间39; '像这样:

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最初创建的相同列表。有什么建议怎么做?

1 个答案:

答案 0 :(得分:1)

为了保留DataFrame的确切结构,一个简单的解决方案是使用pd.to_pickle将pickle格式的DF序列化,而不是使用csv,这将始终丢弃有关数据类型的所有信息,重新导入后需要手动重建。泡菜的一个缺点是它不是人类可读的。

# 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)