将每个工作表读入一个新的数据框

Posted

技术标签:

【中文标题】将每个工作表读入一个新的数据框【英文标题】:Reading each worksheet into a new dataframe 【发布时间】:2021-01-13 15:25:04 【问题描述】:

我在一个 Excel 文件中有 50 多个工作表。 我的主要目标是将不同的列导入到不同的数据框中。 我可以导入文件并读取工作表的所有名称。

import pandas as pd
df = pd.read_excel('Fileoffiles.xls')
df.sheet_names # will give me names of all my sheets

想法是将表格读入df1, df2....., df50

我不希望它在数据帧字典中,而只是在单个数据帧中。

【问题讨论】:

您可以将所有 df 存储在 dict 或列表中,然后访问它。有 50 个单独的变量有什么意义? 这个链接有很多答案可以帮助你:reading-multiple-tabs-from-excel-in-different-dataframes 【参考方案1】:

就像 Mayank 提到的那样,如果您希望为每个数据帧命名,那么数据帧字典可能效果最好。

import pandas as pd
xl = pd.ExcelFile('Book1.xlsx')
sheets = xl.sheet_names 
    
dfs = 
df_names = range(len(sheets))
df_names = ['df'+str(i) for i in df_names]
for sheet,name in zip(sheets,df_names):
    dfs[name] = xl.parse(sheet)
    
dfs

结果:

'df0':     col_1  col_2  col_3  col_4  col_5
 0      12     18     24     30     36
 1      23     24     25     26     27
 2      34     30     26     22     18
 3      45     36     27     18      9
 4      56     42     28     14      0
 5      67     48     29     10     -9
 6      78     54     30      6    -18
 7      89     60     31      2    -27
 8     100     66     32     -2    -36
 9     111     72     33     -6    -45
 10    122     78     34    -10    -54
 11    133     84     35    -14    -63
 12    144     90     36    -18    -72
 13    155     96     37    -22    -81
 14    166    102     38    -26    -90
 15    177    108     39    -30    -99
 16    188    114     40    -34   -108
 17    199    120     41    -38   -117,
 'df1':          col_1       col_2  col_3      col_4      col_5
 0     1.000000   15.000000   29.0  43.000000  57.000000
 1     5.000000   20.000000   35.0  50.000000  65.000000
 2    19.000000   27.000000   35.0  43.000000  51.000000
 3    26.333333   32.666667   39.0  45.333333  51.666667
 4    35.333333   38.666667   42.0  45.333333  48.666667
 5    44.333333   44.666667   45.0  45.333333  45.666667
 6    53.333333   50.666667   48.0  45.333333  42.666667
 7    62.333333   56.666667   51.0  45.333333  39.666667
 8    71.333333   62.666667   54.0  45.333333  36.666667
 9    80.333333   68.666667   57.0  45.333333  33.666667
 10   89.333333   74.666667   60.0  45.333333  30.666667
 11   98.333333   80.666667   63.0  45.333333  27.666667
 12  107.333333   86.666667   66.0  45.333333  24.666667
 13  116.333333   92.666667   69.0  45.333333  21.666667
 14  125.333333   98.666667   72.0  45.333333  18.666667
 15  134.333333  104.666667   75.0  45.333333  15.666667
 16  143.333333  110.666667   78.0  45.333333  12.666667
 17  152.333333  116.666667   81.0  45.333333   9.666667
 18  161.333333  122.666667   84.0  45.333333   6.666667

数据框列表稍微简单一些

dfs = []
for sheet in sheets:
    dfs.append(xl.parse(sheet))

reference

【讨论】:

【参考方案2】:

您可以尝试使用“eval”将第 i 个工作表分配给第 i 个数据帧。代码类似于:

xls = pd.ExcelFile('Fileoffiles.xls')
for i in range(len(xls.sheet_names)):
    eval('df' + str(i) '= pd.read_excel("Fileoffiles.xls", sheetname="' + xls.sheet_names[i] +'")')

【讨论】:

【参考方案3】:

另一个很好的例子,受访者直截了当地告诉调查官,他们错误地询问程序解决问题的能力,而不是简单地回答它,如果他们可以的话,或者只是不回答,因为你已经告诉了OP,他不想要他特别要求的东西......

OP 声明:

我不希望它在数据帧字典中,而只是在单个数据帧中。

【讨论】:

这不是答案

以上是关于将每个工作表读入一个新的数据框的主要内容,如果未能解决你的问题,请参考以下文章

将列表框中选定的 Excel 工作表保存为新的工作簿/Excel 文件

从数据结构中间层中剔除值

基于Excel工作表中的单元格颜色和文本颜色子集数据框

将多个工作表导入到 R 中的多个数据框中

如何将数据框拼接成较小的表格并将每个表格保存到 Excel 工作表中

编写数据框字典以分隔 Excel 工作表