我有一个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)