熊猫read_csv加载具有不规则行的数据

时间:2018-10-17 18:39:52

标签: python pandas csv

说我有csv数据,例如:

a
b,c
d,e,f
g,h
i

(请注意缺少逗号,表示空值)

如何将其加载到DataFrame中,以使空值被NaN(或至少是某些东西)填充,如下所示?

     0    1    2
0    a  NaN  NaN
1    b    c  NaN
2    d    e    f
3    g    h  NaN
4    i  NaN  NaN

3 个答案:

答案 0 :(得分:0)

您所要做的就是在文件的开头添加,,,使其像这样:

,,
a
b,c
d,e,f
g,h
i

然后它将完全按照您的想象读取。

这是pd.read_csv('test.csv')的输出:

     Unnamed: 0 Unnamed: 1 Unnamed: 2
0          a        NaN        NaN
1          b          c        NaN
2          d          e          f
3          g          h        NaN
4          i        NaN        NaN

答案 1 :(得分:0)

这里:

pd.read_csv('myfile.csv', header=None)

您可以自己填写缺失的值。除非数据有些不同,否则这应该可以工作。

答案 2 :(得分:0)

这对我来说适用于以上数据:

import io
import pandas as pd

def add_delimiters(fpath, delimiter=','):

    s_data = ''
    max_num_delimiters = 0

    with open(fpath, 'r') as f:
        for line in f:
            s_data += line
            delimiter_count = line.count(delimiter)
            if delimiter_count > max_num_delimiters:
                max_num_delimiters = delimiter_count

    s_delimiters = delimiter * max_num_delimiters + '\n'

    return io.StringIO(s_delimiters + s_data)

pd.read_csv(add_delimiters('data.csv'))

在尝试加载数据时,仅调用pd.read_csv('data.csv', header=None)会引发ParseError。 ParserError: Error tokenizing data. C error: Expected 1 fields in line 2, saw 2

这似乎是默认行为,而不是需要通过在第一行添加额外的定界符来手动编辑数据。或者至少应该有一个可以升起的旗帜来完成这项工作。