繁体   English   中英

如何使用 pandas 在循环中创建变量并读取多个 excel 文件?

[英]How to create variables and read several excel files in a loop with pandas?


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 的 dataframe X2 将具有 B.xlsx 的 dataframe。 . .

解决了:

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

这可能会有所帮助。

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)

主要拉力:

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

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方法是最好的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM