如果csv为空,如何不读取read_csv

Dev*_*ner 11 python pandas

使用Python 2.7和Pandas

我必须解析我的目录并绘制一堆CSV.如果CSV为空,则脚本会中断并生成错误消息:

pandas.io.common.EmptyDataError: No columns to parse from file
Run Code Online (Sandbox Code Playgroud)

如果我存储了我的文件路径

file_paths=[]
Run Code Online (Sandbox Code Playgroud)

如何阅读每一个并仅绘制非空CSV?如果我将空数据帧定义为df = [],我尝试以下代码

for i in range(0,len(file_paths)):
   if pd.read_csv(file_paths[i] == ""):
      print "empty"
   else df.append(pd.read_csv(file_paths[i],header=None))
Run Code Online (Sandbox Code Playgroud)

Nik*_* VJ 19

请注意,从 pandas 0.22.0(我可以肯定)开始,为空 csv 引发的异常是pandas.errors.EmptyDataError. 如果您要导入类似 的熊猫import pandas as pd,请使用pd代替pandas

如果您的 csv 文件名在数组中manyfiles,则

import pandas as pd
for filename in manyfiles:
    try:
        df = pd.read_csv(filename)

    except pd.errors.EmptyDataError:
        print('Note: filename.csv was empty. Skipping.')
        continue # will skip the rest of the block and move to next file

    # operations on df
Run Code Online (Sandbox Code Playgroud)

我不确定是否pandas.io.common.EmptyDataError仍然有效。在参考文档中找不到它。而且我还建议不要使用全面的方法,except:因为您将无法知道是否是其他原因导致了问题。


Bou*_*oud 14

我会抓住相应的异常,因为在python中不建议使用catch:

import pandas.io.common

for i in range(0,len(file_paths)):
   try:
      pd.read_csv(file_paths[i])
   except pandas.io.common.EmptyDataError:
      print file_paths[i], " is empty"
Run Code Online (Sandbox Code Playgroud)

  • 自从发布此解决方案以来,这似乎已经发生了变化。现在需要使用 pandas.errors 而不是 pandas.io.common (7认同)

Chu*_*uck 7

您可以使用内置tryexcept语法来跳过返回错误的文件,如下所示:

此处描述:Python 中的 Try/Except:您如何正确忽略异常?

for i in range(0,len(file_paths)):
   try:
       pd.read_csv(file_paths[i])
       ### Do Some Stuff
   except:
       continue
       # or pass
Run Code Online (Sandbox Code Playgroud)

这将尝试读取每个文件,如果不成功则继续读取下一个文件。

  • 我认为如此广泛的除了不是最佳实践,@Boud 的答案更合适。 (7认同)