我有一个csv,如下所示:

customer_id,date_time,product
1,"2018-10-08 00:00:00",[]
2,"2018-03-26 00:00:00","["apple","orange"]"


可以看到,第4列是混乱的,即如果该字段中没有文本,则方括号将不会用双引号引起来。

任何人,我的问题是在导入大熊猫时:

df = pd.read_csv('df.csv', sep=',')


出现错误消息:

ParserError: Error tokenizing data. C error: Expected 3 fields in line 3, saw 4


我相信,大熊猫会把“苹果”和“橙色”之间的逗号混淆,尽管它们位于同一列中。
我找到:
Python Pandas Error tokenizing data
哪里解决:

data = pd.read_csv('file1.csv', error_bad_lines=False)


建议。但是,在我的情况下这不可行,因为这会影响太多的行。我是Python的新手。过去,R中的以下内容可以毫无问题地导入:

df <- read.csv(file.choose(), stringsAsFactors = FALSE)

最佳答案

尝试使用Python的csv模块读取数据,以帮助您解析数据。举个例子:

import csv

import pandas as pd

with open('test.csv','r') as f:
    csv_reader = csv.reader(f, quotechar = None)
    headers = next(csv_reader)
    csv_list = list(csv_reader)

concatenated_csv_list = [i[:2]+[','.join(i[2:])] for i in csv_list]


假设格式是一致的,这会将奇怪的逗号作为数据文件中的定界符进行排序,而其他逗号仅从2个索引字段开始才出现。

因此,一旦您有了一个一致的列表:

concatenated_csv_list
>>
[['1', '"2018-10-08 00:00:00"', '[]'],
 ['2', '"2018-03-26 00:00:00"', '"["apple","orange"]"']]


您可以通过阅读嵌套列表及其标题将其转换为数据框。

pd.DataFrame(data = concatenated_csv_list, columns = headers)

10-04 11:43
查看更多