【问题标题】:Importing multiple Excel files into multiple pd.Series将多个 Excel 文件导入多个 pd.Series
【发布时间】:2019-08-30 01:12:49
【问题描述】:

我正在尝试创建一个 for 循环来将多个 Excel 文件导入多个数据帧。

我尝试使用两个变量执行for 循环,其中f 表示文件的路径,i 表示从 1 到 len(files) 的不同数据帧,因此数据帧将被命名为“1”并包含第一条路径中的 Excel 等。

path = os.getcwd()
files = os.listdir(path)

for f, i in zip(files, np.arange(len(files))):
    i = pd.read_excel(f)

相反,我似乎只得到一个名为“i”的数据框,其中只包含一个 Excel 文件。

【问题讨论】:

标签: python pandas


【解决方案1】:

首先,i 的范围仅在 for 循环内,因此您永远不会使用i 将数据帧从循环中取出。其次,您正在使用变量i进行循环,然后将数据帧分配给i,然后再次使用i进行循环,并再次分配给i,在每个循环中覆盖i;这就是您只获得最后一个 excel 数据的原因。第三,你不能用数字来命名一个对象,这是一个变量的工作。

我建议一个数据框列表:

dataframes = [] # list of dataframes, empty at the begining

for f in files:
    dataframes.append(pd.read_excel(f))

现在您可以访问每个单独的数据框,调用其自己的变量dataframes[0]dataframes[1]dataframes[2]...

【讨论】:

    【解决方案2】:

    我认为您不需要先为路径执行 os.getcwd() 。 os.listdir() 应该可以正常工作。

    如果 xlsx 文件是您目录中唯一的内容:

    这将创建一个数据框列表,然后如果它们是相同的结构,您可以使用pd.concat 将它们全部组合起来。

    files = os.listdir()
    
    dataframes = []
    for file in files:
        dataframes.append(pd.read_excel(file))
    
    combined_dataframes = pd.concat(dataframes, sort=False)
    

    dataframe_series = pd.Series(dataframes)
    

    以下将创建一个字典,其中键名为“excel_file_1”、“excel_file_2”等。

    dataframes = {}
    for i, file in enumerate(files):
        name = 'excel_file_' + str(i+1)
        dataframes[name] = pd.read_excel(file) 
    

    【讨论】:

    • 谢谢!虽然这不是我想要做的,但它仍然对我有帮助!
    • 你想做什么?
    • 这将创建一个包含所有数据帧的数据帧,我想创建单独的变量,这些变量分别包含数据帧。
    • 第一个例子是这样的,只有当你使用pd.concat()。第一部分将创建一个数据帧列表,您可以在其中通过调用 dataframes[0]、dataframes[1].. 等访问每个数据帧。
    • 没有理由为每个数据框创建单独的变量。您应该将数据框容纳在单个对象中,例如列表或字典。这是正确的做法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多