读取CSV文件,但缺少一些EOL

时间:2018-07-23 09:49:28

标签: python pandas csv dataframe eol

我需要读取一些csv文件到pandas数据帧,并且我遇到了一些缺少行尾字符的文件。它根本不存在。 pandas.read_csv由于“列数不同”而无法读取它们。

Time; A; B; C
12:00; 1; 2; 3
12:01; 4; 5; 6; 12:02; 7; 8; 9
12:03; 10; 11; 12
12:04; 13; 14; 15

幸运的是,所有这些错误都在第一列之前,因此我可以寻找时间(没有其他列有时间)。在这种情况下,我只需要在12:02之前插入CR / LF,然后读取到数据框:

Time; A; B; C
12:00; 1; 2; 3
12:01; 4; 5; 6; 
12:02; 7; 8; 9
12:03; 10; 11; 12
12:04; 13; 14; 15

read_csv()之前有有效的方法吗?还是我需要首先打开每个文件,浏览每行,替换,关闭,然后用熊猫阅读?


使用:python3.5.2,pandas 0.22.0

1 个答案:

答案 0 :(得分:2)

如果有异常,可以尝试对csv进行预处理

例如:

import pandas as pd

res = []
with open(filename) as infile:             #Read CSV
    header = next(infile).split(";")       #Get Header
    for line in infile:                    #Iterate each line
        val = line.split(";")
        if len(val) == 4:                  #Check if 4 elements in each line
            res.append(val)
        else:
            res.extend( [val[i:i+4] for i in range(0, len(val), 4)] )     #Else split it. 

df = pd.DataFrame(res, columns=header)
print(df)

输出:

     Time    A    B    C\n
0   12:00    1    2    3\n
1   12:01    4    5      6
2   12:02    7    8    9\n
3   12:03   10   11   12\n
4   12:04   13   14     15