我正在尝试在这里做两件事:
我能够使用以下命令导入一个.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,就可以对其进行“更新”:
.csv
文件名。我遇到的问题是:(a)如何使可伸缩方式提取所有.csv文件? (b)是否可以从github文件夹中仅提取以.csv
结尾的文件名?为了执行上面的(2)。
答案 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')