【问题标题】:Return multiple DataFrames from a function with Pandas使用 Pandas 从函数返回多个 DataFrame
【发布时间】:2018-01-01 07:57:40
【问题描述】:

我正在尝试使用 Pandas 将多个 excel 表解析为单独的单独数据帧。

到目前为止我的代码是:

sheet_names =[tab1, tab2]
df_names = [1,2]

def initilize_dataframes(sheet_names):
    for name in sheet_names:
       df = xls_file.parse(name) #parse the xlxs sheet
       df = df.transpose() #transpose dates to index
       new_header = df.iloc[0] #column header names 
       df = df[1:] #drop 1st row 
       df.rename(columns=new_header, inplace= True) #rename the columns
    return df`
`
for i in df_names:
     df_(i) = initilize_dataframes(sheet_names)#something like this idk 

最后两行我无法理解。我知道该函数将返回 df,但我希望它从 df_names 列表中获取值。并相应地标记 DataFrame。

例如,excel表格中的tab1,DataFrame应该命名为df_1,分别循环为tab2和df_2。

【问题讨论】:

    标签: python excel pandas dataframe


    【解决方案1】:

    可以globals:

    for i, val in enumerate(df_names):
         globals()['df_' + str(vals)] = initilize_dataframes(sheet_names[i])
    

    但更好的是使用dictDataFramessheet_namesenumerate 中选择位置,但需要减去1,因为python 从0 计数:

    dfs = {}
    for i, val in enumerate(df_names):
         dfs[val] = initilize_dataframes(sheet_names[i])
    
    print (dfs[1])
    

    【讨论】:

    • 工作就像一个魅力,谢谢!字典是我什至没有考虑过的东西。太棒了。
    • @KKobain - 很高兴能帮上忙!
    • 如果我的数据帧不是整数,而是df_names= ['sheet1','sheet2','sheet3']
    • 然后通过print (dfs['sheet1'])选择
    • 现在不工作了?它显示了这个错误raise XLRDError('No sheet named <%r>' % sheet_name) XLRDError: No sheet named <'t'>,所以它似乎没有正确迭代。最初的定义有问题吗?
    猜你喜欢
    • 2021-03-16
    • 2018-02-23
    • 2012-05-31
    • 2016-12-09
    • 2018-06-07
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多