【问题标题】:Read CSV File with some EOL missing读取缺少一些 EOL 的 CSV 文件
【发布时间】:2018-07-23 09:49:28
【问题描述】:

我需要将一堆 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

【问题讨论】:

    标签: python pandas csv dataframe eol


    【解决方案1】:

    如果您有违规行为,您可以尝试对 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
    

    【讨论】:

      猜你喜欢
      • 2017-04-27
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      相关资源
      最近更新 更多