数据帧的迭代创建和命名

时间:2019-10-29 21:46:30

标签: python pandas dataframe

继续发布Pandas Multiple DataFrames from other DataFrames

设法遍历多个较小的数据框(请注意,超市名称是手动添加的,以帮助理解问题;数据框名称不作为数据框的属性而存在):

    Loblaws

     Summer   Winter
Milk  -7800.0  -3600.0
Salt  -9000.0  -4500.0
Pear -15300.0 -11700.0

Wal-Mart

     Summer   Winter
Milk -14700.0 -10200.0
Salt  -7500.0  -4800.0
Pear  -3000.0  -9600.0

Whole Foods

     Summer  Winter
Milk -11500.0 -7500.0
Salt  -7000.0 -8500.0
Pear  -1000.0 -6500.0

并与“季节”中的“基本”数据框合并:

for df in locationlist:
    df = df.transpose()
    merged_dataframe = pd.merge(dfs, df, left_on='Season',right_index = True)
    merged_dataframe.name = str(df)
    merged_dataframes.append(merged_dataframe)
    display(merged_dataframe)

通过转置使输出看起来像:

            Season  Milk    Salt    Pear
Date                
2018-01-24  Winter  -7500.0 -8500.0 -6500.0
2018-01-25  Winter  -7500.0 -8500.0 -6500.0
2018-01-26  Winter  -7500.0 -8500.0 -6500.0
2018-01-27  Winter  -7500.0 -8500.0 -6500.0
2018-01-28  Winter  -7500.0 -8500.0 -6500.0
...         ...     ...     ...     ...

但是,尝试使用以下方法将名称作为属性返回:

for dfs in merged_dataframes:
    print(dfs.name)

以预先合并的格式打印每个超市的各个数据框,例如:

       Milk     Salt     Pear
Summer -7800.0  -9000.0  -15300.0
Winter -3600.0  -4500.0  -11700.0
       Milk     Salt     Pear
Summer -14700.0 -7500.0  -3000.0
Winter -10200.0 -4800.0  -9600.0
       Milk     Salt     Pear
Summer -11500.0 -7000.0 -1000.0
Winter  -7500.0 -8500.0 -6500.0

2 个答案:

答案 0 :(得分:1)

...从上一个问题继续... 我看到这里发生了什么: 当您执行merged_dataframe.name = str(df)时,您似乎想要数据框来自的变量的名称, 实际发生的是,您将df引用的整个数据框(原始的超级市场数据框)转换为字符串(使用str方法),然后将整个数据框分配为名称。

实际打印名称后,您将获得名称,即整个数据帧…

我有个好消息和个坏消息:

坏消息:当您编写以下行时,您无法恢复最初引用该数据帧的变量的名称:supermarkets = [loblaws, wal_mart, whole_foods]该变量名无法从循环内访问。

好消息:您可以通过在for循环之前执行以下操作来为原始数据帧分配名称变量来解决此问题:

merged_dataframes = []
# first put all dataframes in a list
Loblaws.name = "Loblaws"
Wal_Mart.name = "Wal-Mart"
Whole_foods.name = "Whole Foods"
supermarkets = [loblaws, wal_mart, whole_foods]

for df in locationlist:
    name_str = df.name
    df = df.transpose()
    merged_dataframe = pd.merge(dfs, df, left_on='Season',right_index = True)
    merged_dataframe.name = name_str
    merged_dataframes.append(merged_dataframe)

我希望这对您有用!让我知道怎么回事!

答案 1 :(得分:0)

import pandas as pd

columns = ['summer','winter']
index = ['milk','salt','pear']
dfs = {
    'Loblaws': pd.DataFrame([[-7800.0,-3600.0],[-9000.0,-4500.0],[-15300.0,-11700.0]], columns=columns, index=index),
    'Wal-Mart': pd.DataFrame([[-14700.0,-10200.0],[-7500.0,-4800.0],[-3000.0,-9600.0]], columns=columns, index=index),
    'Whole Foods': pd.DataFrame([[-11500.0,-7500.0],[-7000.0,-8500.0],[-1000.0,-6500.0]], columns=columns, index=index)
}

for df in dfs:
    dfs[df] = dfs[df].transpose()
    dfs[df]['season'] = dfs[df].index
    dfs[df]['name'] = [df for _ in range(len(dfs[df]))]
    dfs[df].reset_index(drop=True, inplace=True)

merged_df = pd.concat(dfs.values(), axis=0)
merged_df.reset_index(drop=True, inplace=True)