CSV文件包含“"、“ab、abc”、“abc”等值。请注意,我指的是未知值中的空值。这与“"不同,”“中的值尚未设置。我对这两个值的处理方式不同。我需要一种方法来读取“”和空值,并区分两者。我将数据Map到数字,以便“”Map到0和,,Map到NaN。请注意,我没有遇到解析问题,使用逗号作为分隔符可以很好地解析“ab,abc”等字段。问题是python将“”和空值读取为' '等空字符串。这两个值不相同,不应分组为空字符串。
不仅如此,我还需要编写csv文件,使“”写为“”而不是,,NaN应该写为,,(空值)。
我已经研究了csv方言,如双引号,escapechar,quotechar,引用。这不是我想要的。这些都是分隔符出现在数据中的情况,即“ab,abc”,正如我所提到的,用特殊字符解析不是问题。
我不想使用Pandas。我唯一能想到的是regex?但是如果我有数百万行要处理,那是一个开销。
我想要的行为是这样的:
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“
3条答案
按热度按时间p5cysglq1#
在CPython source中浏览
csv
module(搜索IN_QUOTED_FIELD
),它没有任何内部状态允许你这样做.例如,分析:解析为:
'ab"c"d'
,这可能不是您所期望的。例如:特别是,引号只在字段开头进行特殊处理,所有字符在遇到时都添加到字段中,而不允许在字段"取消引用"时触发任何特殊行为
fnvucqvd2#
我想出的解决办法是这样的:
如果我更改输入文件,使引用字符串有转义字符'',下面是输入文件:
那么双引号的空字段和无引号的空字段是可分的
这是目前为止我最好的解决方案...
5t7ly7z53#
如果你想在Python中阅读csv文件时能够区分空字符串和未定义的值,你可以通过以下方式来实现:
首先,它执行一个预处理步骤,将空字符串转换为占位符值;然后,它让
csv
模块解析输入;最后,当从csv文件阅读值时,它使用占位符值来区分空字符串和未定义值。我使用以下csv文件运行此脚本:
上面写着: