从github文件夹导入多个csv文件-Python-COVID-19

时间:2020-04-05 00:48:00

标签: python pandas csv

我正在尝试在这里做两件事:

  1. 导入所有.csv文件,并将它们添加到df中。
  2. 使用最新上传的文件更新df。

我能够使用以下命令导入一个.csv:

import pandas as pd
url = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/01-22-2020.csv' 
pd.read_csv(url).fillna(0)

我可以一次导入所有.csv个文件(如果我知道如何提取所有.csv文件名,则可以循环执行),但是应该有一种更有效的方法。一旦有了df,就可以对其进行“更新”:

  1. 提取所有.csv文件名。
  2. 检查它们是否都在df中(带有日期列)。如果缺少一个文件,请将缺少的.csv文件添加到df中。

我遇到的问题是:(a)如何使可伸缩方式提取所有.csv文件? (b)是否可以从github文件夹中仅提取以.csv结尾的文件名?为了执行上面的(2)。

3 个答案:

答案 0 :(得分:1)

您可以通过以下方式列出所有csv个文件:

import glob

csvfiles = glob.glob("/path/to/foder/*.csv")

在拥有所有csv文件路径之后,现在您可以遍历该路径并将其读取到df,检查是否缺少列或其他任何类型的列

答案 1 :(得分:1)

我仍在努力寻找更好的解决方案,但以下是我使用我的代码从 github 目录中提取的解决方法。不幸的是,我仍然没有找到一种方法来像在本地驱动器上那样在 github 目录中获取 CSV 列表。

mapper = {k:v for k in df1.Description for v in df2.Description if v in k}

df3 = pd.concat([
    df1[df1.Description.isin(mapper.keys())].reset_index(drop=True),
    df2[df2.Description.isin(mapper.values())].rename(columns={'Description': 'Description (df2)'}).reset_index(drop=True)
], axis=1)

答案 2 :(得分:0)

我建议您使用pathlib,因为它提供恕我直言,这是一种处理文件的简便方法:

from pathlib import Path 
files = Path(folder containing files)
#filter for only csv files
csv_only = files.rglob('*.csv')
#read ur csv files using a list comprehension
#u can attach the filename if it is relevant and makes sense
#by using the stem function from pathlib
combo = [pd.read_csv(f)
         .assign(f.stem)
         .fillna(0)
         for f in csv_only]

#u can lump them all into one dataframe, using pandas' concat function:

 one_df = pd.concat(combo,ignore_index=True)

#u can remove duplicates :

one_df = one_df.drop_duplicates('date')