这篇文章是从熊猫到_csv 输出引用问题的后续。
比如说,我用文本数据创建了一个数据框。此文本数据存储为字符串列表:
In [1]: import pandas as pd
In [2]: text = ['this', 'is', '"out text"']
...: df_pre = pd.DataFrame(index=['1'], columns=['one','two'])
...: df_pre.loc['1','one'] = 123
...: df_pre.loc['1','two'] = text
检查预读数据框的列:
In [3]: df_pre
Out[3]:
one two
1 123 [this, is, "out text"]
In [4]: df_pre.two.iloc[0]
Out[4]: ['this', 'is', '"out text"']
这正是我想要的:df.two是一个字符串列表,并且保留了字符串元素中的引号。
但是当我写入然后将 df 作为 csv 读取时:
In [5]: df_pre.to_csv('foo.txt', index=False)
In [5]: df_post = pd.read_csv('foo.txt')
我看到df.two已经不同代表,以便有更多的现在报价在后-读取数据帧:
In [6]: df_post
Out[6]:
one two
0 123 ['this', 'is', '"out text"']
和这里:
In [7]: df_post.two.iloc[0]
Out[7]: '[\'this\', \'is\', \'"out text"\']'
这样做的问题是,如果我想df.two为每一行遍历列中的每个字符串元素,我必须处理包装每个元素的附加引号。所以,如果我想计算“这个”发生了多少次,使用post数据框,我会得到 0。
我的问题:
为什么会发生这种情况?
我怎样才能防止它发生?
我已经尝试了所有级别的引用(即 [0,3]),但无济于事。我的目标是处理多行文本数据(标记化、词干提取等),并以 csv 格式保存工作以供以后操作。
作为后续,我希望post看起来像pre:
前(没有额外的报价):
In [8]: df_pre
Out[8]:
one two
1 123 [this, is, "out text"]
发表(附有额外引文):
In [9]: df_post
Out[9]:
one two
0 123 ['this', 'is', '"out text"']
解决方案
df_post.two = df_post.two.apply(eval)
慕田峪9158850
相关分类