【问题标题】:import multiple csv files from github folder - Python - COVID-19从 github 文件夹导入多个 csv 文件 - Python - COVID-19
【发布时间】:2020-12-23 05:19:48
【问题描述】:

我在这里尝试做两件事:

  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)。

【问题讨论】:

标签: python pandas csv


【解决方案1】:

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

import glob

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

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

【讨论】:

  • 这个答案似乎不起作用。我只是得到一个空列表,而不是我需要的 .csv 文件的名称。
  • @Geonerd 因为您提供的路径没有 csv 文件 :)
【解决方案2】:

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

def read_multi_csv(start_year,end_year):     
    years = list(range(start_year,end_year+1))     
    dfs = []
    for YYYY in years:         
        file = 'https://raw.githubusercontent.com/username/project/main/data/normalized/'+str(YYYY)+'_crimes_byState.csv'             
        #print (file)         
        df = pd.read_csv(file)         
        dfs.append(df)
    all_dfs = df.concat(df)         
    return all_dfs  

read_multi_csv(2013,2019)

【讨论】:

    【解决方案3】:

    我建议你使用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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多