读取比预期更多列的数据到数据框中

时间:2018-10-29 19:31:59

标签: python pandas

我将许多.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

谢谢

2 个答案:

答案 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=[''])