【问题标题】:How to create variables and read several excel files in a loop with pandas?如何使用 pandas 循环创建变量并读取多个 excel 文件?
【发布时间】:2019-11-20 18:49:44
【问题描述】:

L=[('X1',"A"),('X2',"B"),('X3',"C")]
for i in range (len(L)):
    path=os.path.join(L[i][1] + '.xlsx')
    book = load_workbook(path)
    xls = pd.ExcelFile(path)
    ''.join(L[i][0])=pd.read_excel(xls,'Sheet1')

File "<ipython-input-1-6220ffd8958b>", line 6
    ''.join(L[i][0])=pd.read_excel(xls,'Sheet1')
    ^
SyntaxError: can't assign to function call

我对 pandas 有疑问,我无法为多个 excel 文件创建多个数据框,但我不知道如何创建变量

我需要一个看起来像这样的结果:

X1 将具有 A.xlsx 的数据框 X2 将具有 B.xlsx 的数据框 . . .

已解决:

d = {}

for i,value in L:
    path=os.path.join(value + '.xlsx')
    book = load_workbook(path)
    xls = pd.ExcelFile(path)
    df = pd.read_excel(xls,'Sheet1')
    key = 'df-'+str(i)
    d[key] = df

【问题讨论】:

  • 这些有用吗?你遇到了什么错误?
  • 我得到:文件“”,第 6 行 ''.join(L[i][0])=pd.read_excel(xls,'Sheet1') ^ SyntaxError: 无法分配给函数调用
  • 我不确定您实际上要做什么 - 您是否尝试遍历一堆 excel 文件,并将它们全部放入单独的数据帧中,按您的意愿命名?跨度>
  • 是的!我需要从不同的 excel 文件创建不同的数据框

标签: python excel pandas


【解决方案1】:

主拉:

我会通过将所有内容读入 1 个数据帧(循环文件和连接)来解决此问题:

import os
import pandas as pd

files = [] #generate list for files to go into

path_of_directory = "path/to/folder/"

for dirname, dirnames, filenames in os.walk(path_of_directory):
    for filename in filenames:
        files.append(os.path.join(dirname, filename))

output_data = [] #blank list for building up dfs

for name in files:
    df = pd.read_excel(name)
    df['name'] = os.path.basename(name)
    output_data.append(df)

total = pd.concat(output_data, ignore_index=True, sort=True)

那么:

从那时起,您可以使用df.loc[df['name'] == 'choice'] 询问df

或者(根据您的问题):

然后,您可以根据此列拆分为数据框字典。这是最好的方法...

dictionary = {}
df[column] = df[column].astype(str)

col_values = df[column].unique()

for value in col_values:
    key_name = 'df'+str(value)
    dictionary[key_name] = copy.deepcopy(df)
    dictionary[key_name] = dictionary[key_name][df[column] == value]
    dictionary[key_name].reset_index(inplace=True, drop=True)

return dictionary

这里讨论了这种方法的原因: Create new dataframe in pandas with dynamic names also add new column 基本上说数据帧的动态命名是不好的,而这种 dict 方法是最好的

【讨论】:

    【解决方案2】:

    这可能会有所帮助。

    files_xls = ['all your excel filename goes here']
    df = pd.DataFrame()
    for f in files_xls:
      data = pd.read_excel(f, 'Sheet1')
      df = df.append(data)
    print(df)
    

    【讨论】:

    • 那行不通,因为我需要不同的 df(例如每个 excel 文件的 df),所以我需要获取 df1、df2、df3.... 不附加,谢谢
    • 也许您可以将一列附加一个静态 excel 文件名,然后根据特定需要过滤数据。
    猜你喜欢
    • 2018-10-08
    • 1970-01-01
    • 2020-12-23
    • 2022-01-22
    • 1970-01-01
    • 2021-07-09
    • 2012-11-12
    • 2021-08-03
    • 2014-11-13
    相关资源
    最近更新 更多