首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python读取csv文件时区分"“和空值

使用python读取csv文件时区分"“和空值
EN

Stack Overflow用户
提问于 2019-04-20 02:24:12
回答 2查看 1.2K关注 0票数 1

CSV文件包含"“、"ab、abc”、"abc“等值。注意,我指的是空值,例如在未知值中。这与"“不同,”“中的值尚未设置。我以不同的方式对待这两个值。我需要一种方法来读取"“和空值,并区分这两者。我将数据映射到数字,以便将"“映射到0,并将,映射到NaN。注意,我没有解析问题,像"ab,abc“这样的字段在逗号作为分隔符的情况下可以很好地解析。问题是python读取"“和空值,如‘’之类的空字符串。并且这两个值不相同,不应分组为空字符串。

不仅如此,我还需要写csv文件,使"“写成"”,而不是,,NaN应该写成,,(空值)。

我已经研究了csv的方言,如doublequote,escapechar,quotechar,quoting。这不是我想要的。这些都是分隔符出现在数据中的情况,例如"ab,abc“,正如我所提到的,用特殊字符进行解析不是问题。

我不想用熊猫。我唯一能想到的就是正则表达式?但是,如果我有数百万行要处理,那么这就是一个开销。

我想要的行为是:

代码语言:javascript
复制
a = "\"\"" (or it could be a="" or a="ab,abc")
if (a=="\"\""):
    map[0]=0
elif(a==""):
    map[0]=np.nan
else:
    map[0] = a

我的csv阅读器如下:

代码语言:javascript
复制
import csv
f = open(filepath, 'r')
csvreader = csv.reader(f)
for row in csvreader:
        print(row)

我希望在读取csv文件时有上述行为。当前只读取了两个值:‘’(空字符串)或'ab,abc‘。

我想要读取3个不同的值。‘‘空字符串、带双引号的'""’字符串和实际字符串'ab,abc‘

EN

回答 2

Stack Overflow用户

发布于 2019-04-20 03:58:10

CPython source中查看csv module (搜索IN_QUOTED_FIELD),它没有任何内部状态可以让您执行此操作。例如,解析:

代码语言:javascript
复制
"a"b"c"d

被解析为:'ab"c"d',这可能不是您所期望的。例如:

代码语言:javascript
复制
import csv
from io import StringIO

[row] = csv.reader(StringIO(
    '"a"b"c"d'))

print(row)

具体地说,引号只在字段的开头进行特殊处理,所有字符在遇到时都只是添加到字段中,而不是任何允许在“取消引用”字段时触发任何特殊行为的字符

票数 0
EN

Stack Overflow用户

发布于 2019-04-20 07:34:51

我认为解决方案是这样的:

如果我更改输入文件,使带引号的字符串具有转义字符'\‘,则以下是输入文件:

代码语言:javascript
复制
col1,col2,col3
"",a,b
\cde \,f,g
,h,i
\j,kl\,mno,p

则带双引号的空字段和不带引号的空字段是可分隔的

代码语言:javascript
复制
csvreader = csv.reader(f, quotechar='\\')
    for row in csvreader:
        print(row)

这是到目前为止我最好的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55766152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档