鱼C论坛

 找回密码
 立即注册
查看: 1333|回复: 4

[已解决]关于字典变数据帧的问题,请大师帮忙

[复制链接]
发表于 2023-4-2 20:26:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 futui 于 2023-4-2 20:31 编辑

我的代码如下 :

rr = '''var Data_currentFundManager =[{"id":"30710472","pic":"/pdf/H8_30710472_1.PNG","name":"泽实","star":4,"workTime":"2年又234天","fundSize":"56.38亿(9只基金)","power":{"avr":"79.12","categories":["经验值","收益率","抗风险","稳定性","择时能力"],"dsc":["反映基金经理从业年限和管理基金的经验","根据基金经理投资的阶段收益评分,反映\u003cbr\u003e基金经理投资的盈利能力","反映基金经理投资的回撤控制能力","反映基金经理投资收益的波动","反映基金经理根据对市场的判断,通过\u003cbr\u003e调整仓位及配置而跑赢业绩的基准能力"],"data":[69.0,88.0,74.80,72.0,75.0],"jzrq":"2023-03-31"},"profit":{"categories":["任期收益","同类平均","沪深300"],"series":[{"data":[{"name":null,"color":"#7cb5ec","y":-21.2912},{"name":null,"color":"#414c7b","y":-12.08},{"name":null,"color":"#f7a35c","y":-15.74}]}],"jzrq":"2023-03-31"}},{"id":"30710473","pic":"/pdf/H8_30710473_1.PNG","name":"万方","star":4,"workTime":"2年又234天","fundSize":"85.14亿(5只基金)","power":{"avr":"72.24","categories":["经验值","收益率","抗风险","稳定性","择时能力"],"dsc":["反映基金经理从业年限和管理基金的经验","根据基金经理投资的阶段收益评分,反映\u003cbr\u003e基金经理投资的盈利能力","反映基金经理投资的回撤控制能力","反映基金经理投资收益的波动","反映基金经理根据对市场的判断,通过\u003cbr\u003e调整仓位及配置而跑赢业绩的基准能力"],"data":[69.0,89.20,65.80,61.40,52.90],"jzrq":"2023-03-31"},"profit":{"categories":["任期收益","同类平均","沪深300"],"series":[{"data":[{"name":null,"color":"#7cb5ec","y":-14.0784},{"name":null,"color":"#414c7b","y":2.55},{"name":null,"color":"#f7a35c","y":11.56}]}],"jzrq":"2023-03-31"}}] ;'''

r=  re.findall(r'var Data_currentFundManager \=\[(.*)\] \;', rr)
df=pd.DataFrame([r])
df

为什么df只能生成一个,我想要的样子如下所示,请大师帮忙修改下,谢谢!

id                 pic                                     name         ....          jzrq
30710472  /pdf/H8_30710472_1.PNG       泽实           .....            2023-03-31
30710473  /pdf/H8_30710473_1.PNG       万方           ......           2023-03-31
最佳答案
2023-4-2 20:32:39
您当前的代码中只能生成一个DataFrame,是因为使用了列表 [r] 作为DataFrame的输入。这将创建一个包含单个元素的列表,并将其视为单个记录,而不是多个记录。

要创建多个记录,请使用以下代码:

```python
import json
result = re.findall(r'var Data_currentFundManager =(\[.*\]) ;', rr)[0]
parsed_result = json.loads(result)
df = pd.json_normalize(parsed_result, sep='_')
``

此代码将找到 JSON 格式的字符串并使用 json.loads() 将其转换为 Python 对象。然后使用 pandas 的 json_normalize() 函数将结果展平为 DataFrame。
在使用 json_normalize() 函数时,设置sep参数为'_'可以使嵌套的JSON键名变成单一列中的“层级”名称,方便查看。

注意:使用正则表达式来提取JavaScript对象可能是危险的,因为它们可能不是有效的JSON,特别是如果存在多行注释等情况。确保您的数据始终符合JSON格式和语法,以避免出现意外错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-2 20:32:39 | 显示全部楼层    本楼为最佳答案   
您当前的代码中只能生成一个DataFrame,是因为使用了列表 [r] 作为DataFrame的输入。这将创建一个包含单个元素的列表,并将其视为单个记录,而不是多个记录。

要创建多个记录,请使用以下代码:

```python
import json
result = re.findall(r'var Data_currentFundManager =(\[.*\]) ;', rr)[0]
parsed_result = json.loads(result)
df = pd.json_normalize(parsed_result, sep='_')
``

此代码将找到 JSON 格式的字符串并使用 json.loads() 将其转换为 Python 对象。然后使用 pandas 的 json_normalize() 函数将结果展平为 DataFrame。
在使用 json_normalize() 函数时,设置sep参数为'_'可以使嵌套的JSON键名变成单一列中的“层级”名称,方便查看。

注意:使用正则表达式来提取JavaScript对象可能是危险的,因为它们可能不是有效的JSON,特别是如果存在多行注释等情况。确保您的数据始终符合JSON格式和语法,以避免出现意外错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-2 20:49:03 | 显示全部楼层
歌者文明清理员 发表于 2023-4-2 20:32
您当前的代码中只能生成一个DataFrame,是因为使用了列表 [r] 作为DataFrame的输入。这将创建一个包含单个 ...

新必应?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-2 20:55:47 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-2 21:24:39 | 显示全部楼层

好吧,怎么感觉比我的助手还强
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 21:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表