作者Pettitte1 (低调奢华有内涵)
看板Python
标题[问题] df.groups後无法to_excel
时间Sun Sep 11 17:27:40 2022
想请问
我有一个dic是用groupby结合後,再用 .groups得到的
但是想要把这结果 to_excel
会跑出AttributeError: 'PrettyDict' object has no attribute 'to_excel'
如果用
for k,v in df.items():
print("key",k , "value:",v)
把key跟value一个一个列出来
会变成类似这样
key 电机机械 value: Int64Index([1513, 1526, 2066], dtype='int64',
name='stock_id')
实际数据只有key=电机机械, value = [1513, 1526, 2066]
却还有Int64Index... 等
请问这是什麽原因呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.115.90.63 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1662888463.A.CC3.html
1F:→ chang1248w: 因为读出来是叫group的object吧 09/11 17:38
2F:→ chang1248w: 要再转回dataframe 09/11 17:38
请问我的代码如下
lists = [1218, 1402, 1444, 1513, 1526, 1536, 1712, 2066, 2231, 2305, 2380,
2387, 2413, 2538, 2542, 2850, 3022, 3202, 3296, 3322, 3346, 3680, 3710, 4114,
4402, 4743, 5353, 5498, 6279, 6285, 6570, 6605, 8069, 8105, 8403, 9802, 9907]
import pandas as pd
import os
os.chdir(r'C:\python\xlsx')
a = pd.DataFrame(lists)
a.set_axis(['stock_id'], axis='columns',inplace=True)
b = pd.read_excel('产业类别.xlsx')
data = a.merge(b, on='stock_id')
data.set_index(['stock_id'], inplace=True)
e = data.groupby('产业类别')
f = e.groups
print(f)
如果我print(f)会得到这样:
{'光电业': [8069, 8105], '其他': [9802, 9907], '化学工业': [1712], '半导体业
': [3680], '建材营造': [2538, 2542], '汽车工业': [1536, 2231, 3346, 6605], '生
技医疗业': [4114, 4743, 8403], '纺织纤维': [1402, 1444, 4402], '通信网路业':
[5353, 6285], '金融保险业': [2850], '电子零组件业': [2413, 3202, 3296, 3322,
3710, 5498, 6279], '电机机械': [1513, 1526, 2066], '电脑及周边设备业': [2305,
2380, 2387, 3022, 6570], '食品工业': [1218]}
但如果DataFrame後格式会跑掉
而且还是贴不上excel
用for k,v in f.items():
print(k + ' = ',v)
结果会是这样:
光电业 = Int64Index([8069, 8105], dtype='int64', name='stock_id')
其他 = Int64Index([9802, 9907], dtype='int64', name='stock_id')
化学工业 = Int64Index([1712], dtype='int64', name='stock_id')
半导体业 = Int64Index([3680], dtype='int64', name='stock_id')
建材营造 = Int64Index([2538, 2542], dtype='int64', name='stock_id')
汽车工业 = Int64Index([1536, 2231, 3346, 6605], dtype='int64',
name='stock_id')
生技医疗业 = Int64Index([4114, 4743, 8403], dtype='int64', name='stock_id')
纺织纤维 = Int64Index([1402, 1444, 4402], dtype='int64', name='stock_id')
通信网路业 = Int64Index([5353, 6285], dtype='int64', name='stock_id')
金融保险业 = Int64Index([2850], dtype='int64', name='stock_id')
电子零组件业 = Int64Index([2413, 3202, 3296, 3322, 3710, 5498, 6279],
dtype='int64', name='stock_id')
电机机械 = Int64Index([1513, 1526, 2066], dtype='int64', name='stock_id')
电脑及周边设备业 = Int64Index([2305, 2380, 2387, 3022, 6570], dtype='int64',
name='stock_id')
食品工业 = Int64Index([1218], dtype='int64', name='stock_id')
也贴不上excel
请问我该怎麽转才能把(k + ' = ',v)这结果贴到excel上呢?
谢谢
※ 编辑: Pettitte1 (59.115.90.63 台湾), 09/11/2022 18:10:50
3F:推 cloki: 这是...要再用一个for loop把v的值贴出来吧,v是numpy array 09/11 20:09
4F:→ cloki: 直接print肯定是把资料型别之类的讯息直接印出来 09/11 20:11
5F:→ lycantrope: 看不懂输出想要什麽,是要产业分开後跟id 分别保存吗 09/11 22:30
6F:→ lycantrope: ?还是同一个table直接存成excel 09/11 22:30
我想要储存成excel
A B C
1 光电业 化学工业
2 8069 1712
3 8105
谢谢
※ 编辑: Pettitte1 (27.247.201.78 台湾), 09/12/2022 08:53:45
8F:→ KSJ: pd.DataFrame(dict([(k,pd.Series(v)) for k,v in d.items()] 09/12 09:43
9F:→ KSJ: d 是你的 groups 09/12 09:43
10F:推 lycantrope: ttps://pastebin.com/QEE0H2Gs 09/12 11:05
後来是将groupby.groups
使用pd.DataFrame.from_dict(groupby.groups, orient='index')
再转成dataframe解决的
谢谢各位帮忙
※ 编辑: Pettitte1 (27.247.201.78 台湾), 09/14/2022 13:43:15