原始数据结构如下,总共 7000 多条,想扁平化然后放到 pd 里面做进一步的处理
>>> len(funds)
7597
>>> funds[0]
{'000005': {'company': '嘉实', 'name': '嘉实增强信用定期债券', 'type': '定开债券', 'earning': {'1m': 0.1, '3m': 1.0, '6m': 0.85, '1y': 2.59}, 'hold_stocks': [{'code': '601966', 'name': '玲珑轮胎', 'percentage': '0.51%', 'volume': 0.67, 'value': 23.48}, {'code': '002745', 'name': '木林森', 'percentage': '0.47%', 'volume': 1.5, 'value': 21.92}]}}
>>> funds[-1]
{'970008': {'company': '华安', 'name': '华安证券汇赢增利一年持有混合 C', 'type': '混合型', 'earning': {'1m': -0.55, '3m': -0.58, '6m': 0.67, '1y': 0}, 'hold_stocks': [{'code': '300692', 'name': '中环环保', 'percentage': '0.72%', 'volume': 31.81, 'value': 496.79}, {'code': '603012', 'name': '创力集团', 'percentage': '0.67%', 'volume': 72.28, 'value': 465.48}, {'code': '300197', 'name': '铁汉生态', 'percentage': '0.64%', 'volume': 138.93, 'value': 440.39}, {'code': '002562', 'name': '兄弟科技', 'percentage': '0.23%', 'volume': 31.0, 'value': 160.27}]}}
>>>
生成 df 代码如下:
df = pd.DataFrame(columns=['fund_code', 'fund_company', 'stock_code', 'stock_name', 'stock_percentage', 'stock_volume', 'stock_value'])
i = 0
for fund in funds:
fund_code = list(fund.keys())[0]
fund_company = list(fund.values())[0]['company']
if list(fund.values())[0]['hold_stocks']:
for hold_stock in list(fund.values())[0]['hold_stocks']:
stock_code = hold_stock['code'].strip()
stock_name = hold_stock['name'].strip()
stock_percentage = float(hold_stock['percentage'].strip('%'))
stock_volume = hold_stock['volume']
stock_value = hold_stock['value']
df.loc[i] = [fund_code, fund_company, stock_code, stock_name, stock_percentage, stock_volume, stock_value]
i += 1
else:
df.loc[i] = [fund_code, fund_company, '', '', 0, 0, 0] # 不持仓任何股票则仅记录基金代码和基金公司
i += 1
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.