Python:如何将一个包含Dataframe的字典转换为一个具有以前一个字典的键作为列名的大型Dataframe?

11 浏览
0 Comments

Python:如何将一个包含Dataframe的字典转换为一个具有以前一个字典的键作为列名的大型Dataframe?

所以我的数据框是由许多个体的Excel文件组成的,每个文件的文件名都是日期,电子表格中记录了当天水果的价格,所以电子表格的样子是这样的:

15012016:
Fruit     Price
Orange    1
Apple     2
Pear      3
16012016:
Fruit     Price
Orange    4
Apple     5
Pear      6
17012016:
Fruit     Price
Orange    7
Apple     8
Pear      9

为了将所有这些信息放在一起,我运行以下代码将所有信息放入数据框字典中

(所有水果价格文件存储在'C:\Fruit_Prices_by_Day'中)

#找到所有文件名
file_list = []
for x in os.listdir('C:\Fruit_Prices_by_Day'):
    file_list.append(x) 
file_list= list(set(file_list))
d = {}
for date in Raw_list:
    df1 = pd.read_excel(os.path.join('C:\Fruit_Prices_by_Day', date +'.xlsx'), index_col = 'Fruit')
    d[date] = df1

然后这是我卡住的地方。如何将这个字典转换为数据框,其中列名是字典的键,即日期,这样我就可以在同一个数据框中获得每天每种水果的价格,如下所示:

          15012016   16012016   17012016   
Orange    1          4          7
Apple     2          5          8
Pear      3          6          9

0
0 Comments

问题的原因是想将一个包含多个Dataframes的字典合并成一个大的Dataframe,其中每个Dataframe的列名作为前一个字典的键名。

解决方法是使用Python的pandas库中的concat函数和assign方法。首先,需要遍历字典中的每个键值对,将每个Dataframe的列名作为常量列添加到Dataframe中,然后使用concat函数将所有Dataframe连接起来。最后,使用set_index方法将日期列设置为索引。

以下是具体的代码实现:

import pandas as pd
# 创建一个包含多个Dataframes的字典
d = {
    'df1': pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}),
    'df2': pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]})
}
# 使用concat函数和assign方法将字典中的Dataframes合并成一个大的Dataframe
result = pd.concat(
    (i_value_df.assign(date=i_key) for i_key, i_value_df in d.items())
).set_index('date')
print(result)

运行以上代码,将得到一个新的Dataframe,其中每个Dataframe的列名作为前一个字典的键名。

0
0 Comments

问题的原因是将一个由多个DataFrame组成的字典转换为一个大的DataFrame,其中列名是前一个字典的键。解决方法是使用DataFrame的set_index方法将每个DataFrame的索引设置为'Fruit'列,然后使用concat方法将这些DataFrame连接在一起,最后使用droplevel方法移除多级索引中的最后一级。

具体代码如下:

d = { k: v.set_index('Fruit') for k, v in d.items()}
df = pd.concat(d, axis=1)
df.columns = df.columns.droplevel(-1) 
print df

如果在concat方法中遇到问题,可以检查是否存在重复的索引值。

参考链接:[stackoverflow.com/questions/27719407](https://stackoverflow.com/questions/27719407)

0
0 Comments

问题出现的原因是,需要将一个字典中的多个DataFrame合并成一个大的DataFrame,并且要求合并后的DataFrame的列名应该是原始字典的key。

解决方法是使用pandas库的concat()函数将字典中的多个DataFrame按列合并起来。然后使用sum()函数对合并后的DataFrame进行求和操作,通过level参数指定按照哪个层级进行求和。

具体的解决方案如下所示:

pd.concat(d, axis=1).sum(axis=1, level=0)

首先使用concat()函数将字典中的多个DataFrame按列合并起来,得到一个合并后的DataFrame。合并后的DataFrame如下所示:

        15012016  16012016  17012016
        Price     Price     Price
Fruit                               
Orange       1         4         7
Apple        2         5         8
Pear         3         6         9

然后使用sum()函数对合并后的DataFrame进行求和操作,通过level=0参数指定按照第一层级进行求和。求和后的DataFrame如下所示:

        15012016  16012016  17012016
Fruit                               
Orange       1         4         7
Apple        2         5         8
Pear         3         6         9

然而,上述代码的使用会出现一个警告信息:“FutureWarning: Using the level keyword in DataFrame and Series aggregations is deprecated and will be removed in a future version. Use groupby instead. df.sum(level=1) should use df.groupby(level=1).sum().”

该警告信息是因为在未来的版本中,对DataFrame和Series进行聚合操作时不再支持使用level参数,而是要使用groupby()函数。警告信息建议改为使用df.groupby(level=1).sum()来替代df.sum(level=1)。

通过使用pd.concat()函数和sum()函数,我们可以将一个字典中的多个DataFrame合并成一个大的DataFrame,并且保持合并后的DataFrame的列名与原始字典的key一致。需要注意的是,在未来的版本中,要使用groupby()函数替代sum()函数的level参数来进行聚合操作。

0