pandas 花了 7 分 32 秒生成一张[45639 rows x 7 columns]的表,实在是太太太慢了,求更快的方法
原始数据结构如下,总共 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