我将许多.csv文件下载到一个目录中。
每个.csv假定具有3列信息。其中一个文件的头看起来像;
17/07/2014,637580,10.755
18/07/2014,61996,10.8497
21/07/2014,126758,10.8208
22/07/2014,520926,10.8201
23/07/2014,370843,9.2883
我用来将.csv读入数据帧(df)的代码是:
df = pd.read_csv(adj_directory+'\\'+filename, error_bad_lines=False,names=['DATE', 'PX', 'RAW'])
我在其中命名三列(DATE,PX和RAW)。
当文件格式正确时,这可以正常工作。但是我注意到,有时.csv的格式略有不同,例如:
09/07/2014,26268315,,
10/07/2014,6601181,16.3857
11/07/2014,916651,12.5879
14/07/2014,213357,,
15/07/2014,205019,10.8607
,其中缺少列值,并且在值位置出现一个逗号。这意味着文件无法加载到数据框中(df
数据框为空)。
是否有一种方法可以使用多余的逗号(忽略有问题的行)将数据读入数据帧,因此df
看起来像:
09/07/2014,26268315,NaN
10/07/2014,6601181,16.3857
11/07/2014,916651,12.5879
14/07/2014,213357,NaN
15/07/2014,205019,10.8607
谢谢
答案 0 :(得分:0)
最好在上游修复文件,以免丢失的值不填充,
。但是,如有必要,您可以通过仅用,,
替换,
(逐行)来用python纠正文件。将您的错误文件作为test.csv
:
import re
import csv
patt = re.compile(r",,")
with open('corrected.csv', 'w') as f2:
with open('test.csv') as f:
for line in csv.reader(map(lambda s: patt.sub(',', s), f)):
f2.write(','.join(str(x) for x in line))
f2.write('\n')
f2.close()
f.close()
corrected.csv
09/07/2014,26268315,
10/07/2014,6601181,16.3857
11/07/2014,916651,12.5879
14/07/2014,213357,
15/07/2014,205019,10.8607
这时您应该可以毫无问题地读取此文件
import pandas as pd
df = pd.read_csv('corrected.csv', names=['DATE', 'PX', 'RAW'])
DATE PX RAW
0 09/07/2014 26268315 NaN
1 10/07/2014 6601181 16.3857
2 11/07/2014 916651 12.5879
3 14/07/2014 213357 NaN
4 15/07/2014 205019 10.8607
答案 1 :(得分:-1)
昨天有这个问题。 您是否尝试过:
pd.read_csv(adj_directory+'\\'+filename,
error_bad_lines=False,names=['DATE', 'PX', 'RAW'],
keep_default_na=False,
na_values=[''])