pandas中字符串数组中的引语到jupy上的\u csv read_csv

2024-04-26 07:19:56 发布

您现在位置:Python中文网/ 问答频道 /正文

这篇文章是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。在

我的问题:

  1. 为什么会这样?在
  2. 我怎样才能防止它发生?在

我尝试过所有级别的引用(即[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)

Tags: csv数据字符串textin文本dfis
1条回答
网友
1楼 · 发布于 2024-04-26 07:19:56

CSV需要能够以可以重新加载的方式存储数据,因此它escapes具有含义的字符(特别是逗号,这是默认的列分隔符,以及单引号,否则将终止字符串)。在

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

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

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

相关问题 更多 >