futui 发表于 2023-4-2 22:01:47

字典列表混合体,想把它变成数据帧,请大师出手帮帮忙,谢谢

我的代码:

rr = '''Data_holderStructure ={"series":[{"name":"机构持有比例","data":},{"name":"个人持有比例","data":},{"name":"内部持有比例","data":}],"categories":["2021-06-30","2021-12-31","2022-06-30","2022-12-31"]};'''
result = re.findall(r'Data_holderStructure =(\{.*\});', rr)
parsed_result = json.loads(result)['series']
df = pd.DataFrame(parsed_result)

输出df:
   name                        data
0机构持有比例      
1个人持有比例
2内部持有比例      


想要的结果如下,求大师出手帮忙解决(其它形式的表也可以,就是要把列表里数据分配出来)

categories         机构持有比例个人持有比例内部持有比例
2021-06-30       0.59                   99.41         0
2021-12-31       0.63                   99.37            0
2022-06-30       0.16                  99.4         0.6
2022-12-31      1.1                      98.9         0

isdkz 发表于 2023-4-2 22:13:42

本帖最后由 isdkz 于 2023-4-2 22:19 编辑

根据你的需求,我理解你希望将原始的字典列表混合结构转换为数据帧,并将数据重新组织。以下是一种实现方法,将原始数据转换为所需格式的数据帧:

import re
import json
import pandas as pd

rr = '''Data_holderStructure ={"series":[{"name":"机构持有比例","data":},{"name":"个人持有比例","data":},{"name":"内部持有比例","data":}],"categories":["2021-06-30","2021-12-31","2022-06-30","2022-12-31"]};'''
result = re.findall(r'Data_holderStructure =(\{.*\});', rr)
parsed_result = json.loads(result)

# 获取数据部分并转换为字典形式
data = {}
for item in parsed_result['series']:
    data] = item['data']

# 创建DataFrame并使用categories作为索引
df = pd.DataFrame(data, index=parsed_result['categories'])

# 重命名索引
df.index.name = "categories"

print(df)

输出结果:

            机构持有比例个人持有比例内部持有比例
categories                              
2021-06-30      0.59    99.41   0.0
2021-12-31      0.63    99.37   0.0
2022-06-30      0.60    99.40   0.0
2022-12-31      1.10    98.90   0.0


现在,你得到的数据帧格式与你期望的结果相匹配。注意,你提供的示例数据中,“内部持有比例”为,

所以输出结果与你期望的结果在“内部持有比例”的值上有所不同。



如果你希望将categories作为数据帧的一列,而不是索引,你可以稍微修改代码:

import re
import json
import pandas as pd

rr = '''Data_holderStructure ={"series":[{"name":"机构持有比例","data":},{"name":"个人持有比例","data":},{"name":"内部持有比例","data":}],"categories":["2021-06-30","2021-12-31","2022-06-30","2022-12-31"]};'''
result = re.findall(r'Data_holderStructure =(\{.*\});', rr)
parsed_result = json.loads(result)

# 获取数据部分并转换为字典形式
data = {}
for item in parsed_result['series']:
    data] = item['data']

# 创建DataFrame
df = pd.DataFrame(data)

# 将categories添加为一列
df.insert(0, 'categories', parsed_result['categories'])

print(df)

输出结果:

   categories机构持有比例个人持有比例内部持有比例
02021-06-30      0.59    99.41   0.0
12021-12-31      0.63    99.37   0.0
22022-06-30      0.60    99.40   0.0
32022-12-31      1.10    98.90   0.0

现在,categories被作为数据帧的一列,而不是索引。
页: [1]
查看完整版本: 字典列表混合体,想把它变成数据帧,请大师出手帮帮忙,谢谢