【问题标题】:Create different dataframes for different datasets stored in a folder为存储在文件夹中的不同数据集创建不同的数据框
【发布时间】:2020-06-04 11:47:22
【问题描述】:

我需要为以下每个数据集创建一个数据框(csv 文件存储在一个文件夹中):

0 text1.csv
1 text2.csv
2 text3.csv
3 text4.csv
4 text5.csv

上面的列表是使用os.chdir创建的,并列出了包含在以下路径文件夹中的所有csv文件:

os.chdir("path")

要为上面的每个数据集创建数据框(稍后使用),我正在执行以下操作:

texts=[]

for item in glob.glob("*.csv"):
    texts.append(item)

for (x,z) in enumerate(texts):
    print(x,z)
    df = pd.read_csv(datasets[int(x)])
    df.index.name = datasets[int(x)]

但是,它不会创建任何数据框。我认为问题出在df,因为我没有为每个数据集区分它(但我只是尝试使用pd.read.csv(datasets[int(x)]) 读取每个数据集)。

您能否告诉我如何为每个数据集创建一个数据框(例如与text1 相关的df1、与text2 相关的df2 等等)?

感谢您的帮助。

【问题讨论】:

  • 如果您对 dict 的数据帧感到满意,以后您将不得不使用密钥来访问每个数据帧,那么 @holdenweb 对这个 SO 问题的回答是一个很好的答案:stackoverflow.com/questions/30635145/…

标签: python pandas


【解决方案1】:

我会使用一个函数并返回一个数据框列表

简单的单行函数:

import glob
import pandas as pd


def get_all_csv(path, sep=','):
    # read all the csv files in a directory to a list of dataframes
    return [pd.read_csv(csv_file, sep=sep)
            for csv_file in glob.glob(path + "*.csv")]

# get all the csv in the current directory
dfs = get_all_csv('./', sep=';')
print(dfs)

【讨论】:

  • 你的文件格式一定很奇怪,我更新了它以使用; 标记化。不过,原始脚本应该可以与普通 csv 一起使用
  • 不幸的是它仍然无法正常工作。它仍然向我返回以下错误:ParserError: Expected 1 fields in line 51, saw 7。所以我认为这两种情况都应该包括(原始+更新的答案)
  • 我更新了它,让您可以选择 sep 作为函数参数。我会检查你的 csv 并确保所有行都有相同数量的列
  • 是的,我想是的。不幸的是,由于该错误,它仍然无法正常工作。我认为解决它的另一种方法是添加一个 try/except 条件以绕过它。但我无法将它添加到您的代码中。非常感谢您的时间和帮助
  • 我的荣幸!您必须使用传统的 for 循环而不是理解来使用 try/except 否则它不会返回任何内容
【解决方案2】:

您要查找的是数据框列表吗?

import pandas as pd
import glob

results=[]

paths =  glob.glob("*.csv"):

for path in paths:
    df = pd.read_csv(path)
    results.append(df)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2019-10-25
    • 2013-12-30
    • 1970-01-01
    • 2019-04-17
    相关资源
    最近更新 更多