当前位置: 首页 > 知识库问答 >
问题:

jupyter上熊猫to_csvread_csv字符串数组中的引文

邬朗
2023-03-14

这篇文章是熊猫输出引用问题to_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中的每个字符串元素。每行有两个列,我必须处理包装每个元素的附加引号。所以,如果我想用post数据帧计算“这”发生的次数,我会得到0。

我的问题是:

  1. 为什么会发生这种情况
  2. 我怎样才能防止它发生

我已经尝试了所有级别的引用(即[0,3]),但没有任何效果。我的目标是处理多行文本数据(标记化、词干分析等),并将工作保存为csv格式以供以后操作。

作为后续行动,我希望帖子看起来像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)

共有1个答案

薛浩言
2023-03-14

CSV需要能够以一种可以重新加载的方式存储数据,以便它能够转义有意义的字符(特别是逗号,它是默认的列分隔符,单引号,否则将终止字符串)。

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

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

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

 类似资料:
  • 问题内容: 我想替换列中的子字符串 到。 需求输出 我尝试,但它返回。 问题答案: 使用与更换和:

  • 问题内容: 我对此有一个类似的问题:Pandas DataFrame:从一列中的字符串中删除不需要的部分 。 所以我用了: 大多数项目以“ PPI /”开头,但并非全部。似乎当没有’PPI /’后缀的项目遇到此错误时: AttributeError:“ float”对象没有属性“ lstrip” 我在这里想念什么吗? 问题答案: 使用replace: 或string.replace:

  • 问题内容: 如问题所述,我有一个很大的数据框,但看起来像: 我试图摆脱文本数据,并将其替换为预定义的数值等效项。例如,在这种情况下,我想分别用或替换的或值。有没有一种方法无需我手动输入和更改值? 问题答案: / 上面的一个有趣的通用版本: 一切都不是。

  • 我有以下数据框 我想用替换和,因此最终的数据帧是 我尝试了以下方法,但不起作用:

  • 我有一个相当大的数据帧(11k行和20列)。其中一列的数据类型是混合的,主要是数字(float),其中有少量字符串分散在各处。 在使用混合列中的数据执行一些统计分析之前,我通过查询其他列来对该数据帧进行子集划分(但如果存在字符串,则无法执行此操作)。99%的时间,一旦子集这个列是纯数字的,但很少字符串值会在子集中结束,我需要捕获它。 通过Pandas混合类型列循环检查字符串(或者反过来检查整个列是

  • 问题内容: 我有一个类似于以下内容的数据框: 我希望输出为以下格式: 想要从“名称”列中删除所有数字。 我最近来的是使用以下代码在 单元 级别进行的: 任何想法如何在 系列 / 数据框 级别上以更好的方式 实现 。 问题答案: 您可以结合使用正则表达式将str.replace应用于列: 输出: 在正则表达式中代表“任何数字”,代表“一个或多个”。 因此,其含义是:“将字符串中所有出现的数字全部替换