pak*_*rob 10 python dictionary dataframe python-2.7 pandas
所以我的数据框是由许多单独的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
Run Code Online (Sandbox Code Playgroud)
因此,为了将所有信息放在一起,我运行以下代码将所有信息放入数据帧的字典中(所有水果价格文件存储在'C:\ Fruit_Prices_by_Day'中)
#find all the file names
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
Run Code Online (Sandbox Code Playgroud)
然后这就是我被卡住的部分.然后我如何将这个dict变成一个数据框,其中列名是dict键,即日期,所以我可以在同一个数据帧中得到每个每个水果的价格,如:
15012016 16012016 17012016
Orange 1 4 7
Apple 2 5 8
Pear 3 6 9
Run Code Online (Sandbox Code Playgroud)
jez*_*ael 12
您可以先尝试使用set_index
所有数据帧comprehension
,然后使用concat
删除multiindex
列中的最后一级od :
print d
{'17012016': Fruit Price
0 Orange 7
1 Apple 8
2 Pear 9, '16012016': Fruit Price
0 Orange 4
1 Apple 5
2 Pear 6, '15012016': Fruit Price
0 Orange 1
1 Apple 2
2 Pear 3}
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
15012016 16012016 17012016
Fruit
Orange 1 4 7
Apple 2 5 8
Pear 3 6 9
Run Code Online (Sandbox Code Playgroud)
解决方案:
pd.concat(d, axis=1).sum(axis=1, level=0)
Run Code Online (Sandbox Code Playgroud)
解释:
之后.concat(d, axis=1)
你会得到
15012016 16012016 17012016
Price Price Price
Fruit
Orange 1 4 7
Apple 2 5 8
Pear 3 6 9
Run Code Online (Sandbox Code Playgroud)
添加.sum(axis=1, level=0)
将其转换为
15012016 16012016 17012016
Fruit
Orange 1 4 7
Apple 2 5 8
Pear 3 6 9
Run Code Online (Sandbox Code Playgroud)
像这样的事情可以工作:循环字典,添加带有字典键的常量列,连接然后将日期设置为索引
pd.concat(
(i_value_df.assign(date=i_key) for i_key, i_value_df in d.items())
).set_index('date')
Run Code Online (Sandbox Code Playgroud)