仅使用Python,Pandas解析由头部组成的csv文件

时间:2016-10-26 15:53:44

标签: python csv pandas

我正在尝试使用pandas读取csv文件数量的内容并将其加载到pandas数据帧中。

所有csv文件都包含标题(第1行),它定义了列名称,然后是数字数据。我只对阅读数字数据感兴趣,因此我使用了skiprows = [0]选项。

例如:

path = 'mypath'
file = 'example1.csv'

我的example1.csv就像:

time varA varB
1.0  2.3  3.2
2.0  4.2  3.4
...  ...  ...

然后我使用这段代码:

array_list = []

for file in os.listdir(path):
    df = pd.read_csv(file, skiprows=[0], header=None)
    array_list.append(df.as_matrix())

这一直有效,直到我得到一个文件,它只包含标题(只有一个原始文件),没有数据,如下例所示,example2.cvs:

time varA varB

我收到了错误

EmptyDataError: No columns to parse from file

有关如何引入仅包含标题的文件例外的任何建议,这并不意味着它是空的吗?

非常感谢您的帮助,

MarcoC

2 个答案:

答案 0 :(得分:0)

如何使用try..except

array_list = []

for file in os.listdir(path):
    try:
        df = pd.read_csv(file, skiprows=[0], header=None)
        array_list.append(df.as_matrix())
    except EmptyDataError:
        # empty file, skip
        continue

这样做的缺点是len(array_list) != len(os.listdir(path))。如果您确实想要空数据框以避免这种情况,请使用header='infer',例如@sam建议:

array_list = []

for file in os.listdir(path):
    df = pd.read_csv(file, header='infer')
    array_list.append(df.as_matrix())

对于内容为

的文件
time varA varB

它返回

Empty DataFrame
Columns: [time varA varB]
Index: []

答案 1 :(得分:0)

header ='infer'或header = 0应该做的伎俩