为了账号安全,请及时绑定邮箱和手机立即绑定

jupyter上pandas to_csv read_csv字符串数组中的引号

jupyter上pandas to_csv read_csv字符串数组中的引号

函数式编程 2021-11-30 16:35:52
这篇文章是从熊猫到_csv 输出引用问题的后续。比如说,我用文本数据创建了一个数据框。此文本数据存储为字符串列表:In [1]: import pandas as pdIn [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_preOut[3]:    one                     two1  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_postOut[6]:    one                           two0  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_preOut[8]:    one                     two1  123  [this, is, "out text"]发表(附有额外引文):In [9]: df_postOut[9]:    one                           two0  123  ['this', 'is', '"out text"']解决方案df_post.two = df_post.two.apply(eval)
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

CSV 需要能够以可以重新加载的方式存储数据,因此它会转义有意义的字符(特别是逗号,这是默认的列分隔符,以及单引号,否则会终止您的细绳)。

要将其从转义格式转换回,您可以使用 eval:

input = '[\'this\', \'is\', \'"out text"\']'
output = eval(input)

该操作也可以在数据帧的整个列上执行。


查看完整回答
反对 回复 2021-11-30
  • 1 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信