![](/img/trans.png)
[英]pandas read_csv does not capture final (unnamed) column into dataframe
[英]pandas read_csv with final column containing commas
因此,我的書中有一個csv數據集格式正確,我正在嘗試獲取pandas
包以正確加載它。 標頭由5個列名組成,但最后一列由包含未轉義逗號的JSON對象組成。 例如
A,B,C,D,E
1,2,3,4,{K1:V1,K2:V2}
我正在通過簡單的training = pd.read_csv('data/training.dat')
加載數據
但是,pandas顯然將其他逗號誤解為新的未標記的列,並且出現了這樣的錯誤:
CParserError: Error tokenizing data. C error: Expected 75 fields in line 3, saw 84
我正在嘗試瀏覽文檔,但顯然失敗了,有人知道如何正確配置pd.read_csv
命令以正確解析它嗎?
我猜是替代方案,因為我可以將腳本的鍵組合為列,從而平整化JSON對象。
如果您可行的是將{
替換為"{
,並將}
替換為}"
,則可以通過以下方式正確讀取: pd.read_csv('data/training.dat',quotechar='"',skipinitialspace=True)
或尋求基於正則表達式的解決方案:
In [205]:
print pd.read_csv('a.data',sep=",(?![^{]*\})", header=None)
0 1 2 3 4
0 A B C D E
1 1 2 3 4 {K1:V1,K2:V2}
[2 rows x 5 columns]
我認為這取決於您要使用JSON進行的操作。 如果您只是想忽略它,可能最簡單的方法是將注釋字符設置為{
(對於此以及下一個,我認為您在其他列中沒有括號)。
pd.read_csv(
'woo.csv',
comment='{'
)
可以使用帶有read_csv
的自定義分隔符從JSON中提取元素,盡管我一點也不相信這是一種明智的方法。 如果熊貓是一個捕獲組(它將re.split
內部使用re.split
),則它將把分隔符變成一列,因此我可以獲得包含JSON的列。 不幸的是,由於這個原因,我也得到了很多空列。 因此, dropna
。
我通過loads
和dumps
發送了JSON,盡管顯然您想做更明智的事情。 :)
json_bit = lambda x: json.dumps(json.loads(x))
pd.read_csv(
'woo.csv',
sep=r'(\{.*\})$|,',
converters={'None.3': json_bit}
).dropna(axis=1)
CSV樣本
A,B,C,D,E
1,2,3,4,{"K1":"V1","K2":"V2"}
3,2,3,4,{"K1": "V1", "k£": {"k3": "v3"}, "K2":"V2"}
無需預處理csv文件,只需使用引擎類型python即可:
dataset = pd.read_csv('sample.csv', sep=',', engine='python')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.