【问题标题】:How to read each file from a folder and create seperate data frames for each file?如何从文件夹中读取每个文件并为每个文件创建单独的数据框?
【发布时间】:2019-11-18 20:03:13
【问题描述】:

我正在尝试让我的代码读取包含各种文件的文件夹。 我希望让 Jupyter 读取该文件夹中的每个文件,并通过将文件的名称作为数据框名称来创建单独的数据框。

到目前为止我有代码:

import glob

path = r'C:\Users\SemR\Documents\Jupyter\Submissions' 
all_files = glob.glob(path + "/*.csv")

li = []

for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0, usecols=['Date', 'Usage'])
    li.append(df)

frame = pd.concat(li, axis=0, ignore_index=True)

此代码连接数据,但我希望每个数据帧都有单独的数据帧,以便我可以单独存储值。有什么可以代替的吗?

以下是 CSV 文件外观示例:

这些 CSV 文件位于同一个文件夹中,因此我希望在运行代码时,会创建与 CSV 文件名同名的新数据框。

谢谢。

【问题讨论】:

  • 单独存储值是什么意思?
  • 不确定您要达到的目标,但这可能是更好的方法:stackoverflow.com/questions/50066635/…
  • 在文件夹中的每个 CSV 文件中,数据包含日期和每个日期的值(即)。我正在尝试创建一个函数,它只从每个文件中获取值列,然后循环它,这样我就可以分别计算出每个 df 的平均值。有意义吗?
  • 最好只有一个大数据框,将文件名存储为一列(参见我之前的链接),然后使用groupby 计算每个文件的平均值。
  • @MartinEvans 将 " d = {os.path.basename(f).split('.')[0]:pd.read_csv(f) for f in glob.glob('*. csv') if "test" in f}" 是你在说什么?

标签: python pandas file directory


【解决方案1】:

为每个数据帧使用不同变量的更好方法是将每个数据帧加载到字典中。

可以使用os.path.basename()os.path.splitext() 的组合提取每个文件名的基本名称。

例如:

d = {os.path.splitext(os.path.basename(f))[0] : pd.read_csv(f) for f in glob.glob('*test*.csv')} 

另外,使用*test* 可以避免在理解中使用if

【讨论】:

  • 这太完美了!非常感谢您的帮助:)
  • 完成 :) 另外,如何在您提供的代码行中从字典中删除 NA?
  • 如果 NA 在数据框内,那么您必须将其转换为 for 循环并在添加之前对其进行测试。您还可以测试 CSV 是否无法加载。如果您尝试将其添加到列表推导中,您可能必须在每个文件中使用 read_csv() 两次,这并不理想。
【解决方案2】:

从我可以建议的问题是,您在列表中存储了不同的 DataFrame。

import glob

path = r'C:\Users\SemR\Documents\Jupyter\Submissions' 
all_files = glob.glob(path + "/*.csv")

li = []

for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0, usecols=['Date', 'Usage'])
    li.append(df)

for dataframes in li:
    """ For getting the mean of a specific column """
    df.loc[:,"Usage"].mean()

【讨论】:

  • 您可以使用 df.dropna() 删除 NaN
猜你喜欢
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 2020-03-16
  • 1970-01-01
  • 2012-12-10
相关资源
最近更新 更多