[英]Distinguish between “” and empty value when reading csv file using python
CSV文件包含諸如“”,“ ab,abc”,“ abc”之類的值。 注意,我指的是空值,如未知值。 這與“”不同,后者尚未設置值。 我對這兩個值的處理不同。 我需要一種方法來讀取“”和空值,並區分兩者。 我正在將數據映射到數字,以使“”映射到0,而將映射到NaN。 請注意,我沒有解析問題,可以使用逗號作為分隔符來解析“ ab,abc”之類的字段。 問題是python讀取“”和空值,如空字符串(例如“”)。 並且這兩個值不相同,因此不應分組為空字符串。
不僅如此,我還需要編寫csv文件,以使“”被寫為“”而不是,而NaN應該被寫為“(空值)”。
我研究了csv方言,例如doublequote,escapechar,quotechar,quoting。 這不是我想要的。 這些都是在數據中出現定界符(即“ ab,abc”)的所有情況,正如我提到的,使用特殊字符進行解析不是問題。
我不想用熊貓。 我唯一能想到的就是正則表達式? 但是,如果要處理數百萬條線,那將是一項開銷。
我想要的行為是這樣的:
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'
查看CPython源代碼中的csv
模塊 (搜索IN_QUOTED_FIELD
),它沒有任何內部狀態可以讓您執行此操作。 例如,解析:
"a"b"c"d
解析為: 'ab"c"d'
,可能不是您所期望的。 例如:
import csv
from io import StringIO
[row] = csv.reader(StringIO(
'"a"b"c"d'))
print(row)
具體來說,引號僅在字段的開頭專門處理,並且所有字符都會在遇到它們時才添加到字段中,而不是任何允許在“取消引用”字段時觸發任何特殊行為的字符
我想出的解決方案是這樣的:
如果我更改輸入文件,以使引用的字符串具有轉義符'\\',則輸入文件如下:
col1,col2,col3
"",a,b
\cde \,f,g
,h,i
\j,kl\,mno,p
然后雙引號的空字段和未引號的空字段是可分離的
csvreader = csv.reader(f, quotechar='\\')
for row in csvreader:
print(row)
到目前為止,這是我最好的解決方案...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.