【问题标题】:Row-wise concatenation of hundreds of csv files into single dataframe将数百个 csv 文件逐行连接到单个数据帧中
【发布时间】:2019-05-26 20:07:53
【问题描述】:

我有数百个 csv 文件,每个文件对应一种独特的化学品。所有 csv 文件都具有相同的格式(3 列和每种化学品的列中的值)。

我想通过逐行连接将所有这些文件组合成一个 pandas 数据帧,但在最终数据帧中没有每个 csv 文件的标题列。我正在使用以下 Python 代码,但从 pd.read_csv 部分收到错误 -

“EmptyDataError:没有要从文件中解析的列”

代码如下。

files_path=r"C:\Users\Desktop\Python\RWE_350files_merge\Drugs"
csvfiles=glob.glob(os.path.join(files_path, "*.csv"))

master_df = []  
for file in csvfiles:
    df = pd.read_csv(file, header = 0)
    master_df.append(df)

result = pd.concat(master_df, ignore_index=True)

我知道 csv 文件不是“空的”,因为我可以从命令行成功地连接它们 - 但是,这种方法会将每个 csv 文件的标题列保留到最终的“连接”数据帧中 - 所以这不是真的可以接受.

我该如何解决这个问题?

【问题讨论】:

  • 你有没有尝试过解决这个问题?
  • 我同意@Hackaholic。这是“你能帮我吗”,还是“你能为我做这件事”吗?如果您根本不知道...尝试将 one csv 文件加载到 pandas,然后使用此 pandas.pydata.org/pandas-docs/stable/reference/api/…,然后在其周围编写一些循环和 fors 和咯咯笑,然后存储生成的 DataFrame 使用 pandas 返回到 csv。
  • 只需读取所有 csv 文件并将数据帧存储在列表 df_list 中,然后您就可以执行 df = pd.concat(df_list) (假设您确实到处都有相同的列)。
  • 向我们展示您当前正在处理的代码。
  • 用我正在处理/使用的代码更新问题(不成功)。

标签: python-3.x pandas


【解决方案1】:

这看起来不错:

    df = pd.read_csv(file, header=0)

但显然您的某些输入文件是空的。 添加print(file) 调试语句 将帮助您专注于特定的空白。

你可以在跳跃之前先看看:

    threshold = 2
    if os.path.getsize(file) > threshold:
        df = pd.read_csv(file, header=0)
        master_df.append(df)

或者您可以决定请求宽恕比请求许可更容易:

    try:
        df = pd.read...
    except pandas.errors.EmptyDataError:
        print(file, 'was empty. Continuing...')

【讨论】:

  • 谢谢@JH!是的,看起来 350 个文件中的一个实际上是空的,这就是导致问题的原因。另外,感谢有关如何在我跳跃之前查看的指示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 2019-10-08
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 2018-03-08
相关资源
最近更新 更多