【发布时间】:2019-09-09 23:29:43
【问题描述】:
CSV 文件包含诸如“”、“ab,abc”、“abc”之类的值。请注意,我指的是空值,如未知值。这与尚未设置值的“”不同。我以不同的方式对待这两个值。 我需要一种方法来读取 "" 和空值,并区分两者。我正在将数据映射到数字,使得“”映射到 0,并且映射到 NaN。 请注意,我没有解析问题,并且使用逗号作为分隔符可以很好地解析诸如“ab,abc”之类的字段。问题是python读取“”和空值,作为空字符串,例如''。并且这两个值不相同,不应该分组为空字符串。
不仅如此,我还需要编写csv文件,使“”写成“”而不是,,NaN应该写成,,(空值)。
我研究了 csv 方言,例如 doublequote、escapechar、quotechar、quoting。这不是我想要的。这些都是分隔符出现在数据中的所有情况,即“ab,abc”,正如我所提到的,使用特殊字符进行解析不是问题。
我不想使用 Pandas。我唯一能想到的是正则表达式?但如果我有数百万行要处理,那就是开销。
我想要的行为是这样的:
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阅读器如下:
import csv
f = open(filepath, 'r')
csvreader = csv.reader(f)
for row in csvreader:
print(row)
我在读取 csv 文件时想要上述行为。目前只读取两个值:''(空字符串)或'ab,abc'。
我想要读取 3 个不同的值。 ' ' 空字符串、'""' 带双引号的字符串和实际字符串 'ab,abc'
【问题讨论】:
-
你用什么来读取 csv?
-
@WoodyPride import csv f = open(filepath, 'r') csvreader = csv.reader(f)
-
@Naz 我建议编辑你的问题以包含它,它在评论中非常难以阅读......
-
CSV 文件的标准化程度并不高,但 RFC-4180 并未提及任何关于带引号和不带引号的空字段之间的区别;这只是您想要做出的区别,还是您需要使用的文件已经存在的区别?
-
@chepner,没有文件有这样的数据。我的文件中引用的空字段和未引用的空字段之间存在区别。我只需要 python 将其映射到数字。此外,要编写 csv 文件,准确区分带引号和不带引号的空字段
标签: python csv double-quotes reader