这篇文章是pandas to_csv output quoting issue的后续文章。在
比如,我用文本数据创建一个数据框。此文本数据存储为字符串列表:
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
检查预读取数据帧的列:
^{pr2}$这正是我想要的:df.two
是一个字符串列表,字符串元素中的引号被保留。在
但当我把df写成csv再读时:
^{3}$我发现df.two
的表示方式不同,因此在post读取数据帧中现在有额外的引用:
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
列中的每一行遍历每一个字符串元素,那么我必须处理包装每个元素的附加引号。所以,如果我想计算“this”发生的次数,使用post数据帧,我会得到0。在
我的问题:
我尝试过所有级别的引用(即[0,3]),但是没有用。我的目标是处理许多行文本数据(标记化、词干分析等),并将工作保存为csv格式,以便以后操作。在
作为后续,我希望文章看起来像前:
预(无附加报价):
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)
CSV需要能够以可以重新加载的方式存储数据,因此它escapes具有含义的字符(特别是逗号,这是默认的列分隔符,以及单引号,否则将终止字符串)。在
要将其从转义格式转换回,可以使用eval:
也可以对数据帧的整列执行该操作。在
相关问题 更多 >
编程相关推荐