我有一个实时url "linktoAPI"包含列表的嵌套字典。我从下面的链接中尝试了许多解决方案,但没有一个能帮助我实现我想要的。显然,这是因为嵌套字典(key: "history_value")的值不统一,并且包含长字符串对象。
从数据帧的列中提取字典值(得到错误:'get'不适用于字符串)
如何将嵌套字典列表转换为pandas DataFrame?(得到错误:'str'对象不是映射)
使用pandas将一列字典拆分为多个独立的列,
https://www.skytowner.com/explore/splitting_dictionary_into_separate_columns_in_pandas_dataframe
from urllib.request import urlopen
import pandas as pd
import json
url = "LINKTOAPI"
response = urlopen(url)
data_json = json.loads(response.read())
baoluu = pd.DataFrame(data_json)
display(baoluu.head())
运行此代码,您可以看到列"history_value"包含一个不统一的字典。我希望这些列被分成"ngaybaolu ", "ngayhoclai"one_answers";lydo"。请帮帮我。非常感谢!!
如果我做对了,这应该可以工作:
import json
import requests
import pandas as pd
req = requests.get('https://office.ieltsvietop.vn/api/get_data/history')
req_json = req.json()
df = pd.DataFrame(json.loads(r['history_value']) for r in req_json)
这个df
应该像
request_id ketoan_id lop_id ... danhsachcho chinhanh_old chinhanh
0 11 2470 551 ... NaN NaN NaN
1 13 2474 551 ... NaN NaN NaN
2 12 2468 564 ... NaN NaN NaN
3 15 2338 442 ... NaN NaN NaN
4 31 2463 239 ... NaN NaN NaN
... ... ... ... ... ... ... ...
5256 4699 4357 NaN ... NaN NaN NaN
5257 4695 3787 NaN ... NaN NaN NaN
5258 4679 4716 NaN ... NaN NaN NaN
5259 4694 4114 596 ... NaN NaN NaN
5260 4705 4839 601 ... NaN NaN NaN
[5261 rows x 20 columns]
然后用
选择所需列ngaybaoluu
,ngayhoclai
和lydo
df = df[['ngaybaoluu', 'ngayhoclai', 'lydo']]
最终的df
是
ngaybaoluu ngayhoclai lydo
0 NaN NaN Bạn phù hợp với trình độ của lớp
1 NaN NaN Bạn cần lấy target để ra trường và phục vụ côn...
2 NaN NaN Học viên đăng kí học Speaking-express
3 NaN NaN Vt3 có lớp phù hợp với trình độ của bạn
4 NaN NaN NaN
... ... ... ...
5256 22-06-2022 01-08-2022 Học viên tập trung ôn thi THPTQG. Học viên đã ...
5257 21-06-2022 21-08-2022 Học viên chưa sắp xếp được lịch học lại . Học ...
5258 21-06-2022 15-07-2022 Học viên đi tập quân sự. Học viên đã hiểu rõ ...
5259 NaN 22-06-2022 NaN
5260 NaN NaN NaN
[5261 rows x 3 columns]
请注意,许多列中都有空值,这意味着url的原始响应不包含这些字段,所以没有问题。如果您想要填充这些空值,您可以查找.fillna()
。