无法使用json\u normalize规范化json字符串

2024-09-29 23:14:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用pandas标准化一些数据,我可以用一个简单的例子来处理,但不能用更复杂的例子。你知道吗

我已经在下面列出了我的代码,并注释了哪些行可以工作,哪些行不可以工作。你知道吗

我怀疑这可能与不工作的json有多个“DayTypes”值有关,而工作的json没有。你知道吗

我尝试了太阳下的每一个排列,我终于接受了失败,期待着你善良的灵魂来帮助我。你知道吗

import pandas as pd
import json
from pandas.io.json import json_normalize

json_data = "[{\"DayTypes\":{\"Monday\":\"true\"},\"OpeningHours\":{\"OpenPeriod\"" \
   ":{\"StartTime\":\"07:00:00.000\",\"EndTime\":\"15:00:00.000\"}}},{\"DayTypes\"" \
   ":{\"Tuesday\":\"true\",\"Wednesday\":\"true\",\"Thursday\":\"true\"},\"OpeningHours\"" \
   ":{\"OpenPeriod\":[{\"StartTime\":\"07:00:00.000\",\"EndTime\":\"13:00:00.000\"},{\"" \
   "StartTime\":\"17:00:00.000\",\"EndTime\":\"19:00:00.000\"}]}},{\"DayTypes\":{\"Friday\"" \
   ":\"true\"},\"OpeningHours\":{\"OpenPeriod\":{\"StartTime\":\"07:00:00.000\",\"EndTime\":\"" \
   "20:00:00.000\"}}},{\"DayTypes\":{\"Saturday\":\"true\"},\"OpeningHours\":{\"OpenPeriod\":{\"" \
   "StartTime\":\"08:00:00.000\",\"EndTime\":\"20:00:00.000\"}}},{\"DayTypes\":{\"Sunday\"" \
   ":\"true\"},\"OpeningHours\":{\"OpenPeriod\":{\"StartTime\":\"11:00:00.000\",\"EndTime\":\"" \
   "13:00:00.000\"}}}]"

json_data1 = "[{\"DayTypes\": {\"MondayToFriday\": \"true\"}, \"OpeningHours\": {\"OpenPeriod\": {\"StartTime\": \"06:15:00.000\", \"EndTime\": \"20:40:00.000\"}}}, {\"DayTypes\": {\"Saturday\": \"true\"}, \"OpeningHours\": {\"OpenPeriod\": {\"StartTime\": \"07:10:00.000\", \"EndTime\": \"21:30:00.000\"}}}, {\"DayTypes\": {\"Sunday\": \"true\"}, \"OpeningHours\": {\"Unavailable\": \"true\"}}, {\"DayTypes\": {\"MondayToFriday\": \"true\"}, \"OpeningHours\": {\"OpenPeriod\": {\"StartTime\": \"07:10:00.000\", \"EndTime\": \"13:50:00.000\"}}}]"

# print(type(json_data))

data = json.loads(str(json_data))
data1 = json.loads(str(json_data1))

# this doesn't work :(
# json_normalize(data, 'DayTypes',[['OpeningHours','OpenPeriod','StartTime'],['OpeningHours','OpenPeriod','EndTime']], errors='ignore' )

# this works as expected
json_normalize(data1, 'DayTypes',[['OpeningHours','OpenPeriod','StartTime'],['OpeningHours','OpenPeriod','EndTime']], errors='ignore' )

我希望能看到一张有日期、开始时间和结束时间的桌子。如果一天有多个开始和结束时间,那么这些只是表中的新行。你知道吗

Day             StartTime       EndTime
MondayToFriday  06:15:00.000    20:40:00.000
Saturday        07:10:00.000    21:30:00.000
Sunday          nan             nan
MondayToFriday  07:10:00.000    13:50:00.000

更新1: 如果我从列表中抓取第一项(数据[0]、'DayTypes'等),我会得到星期一的详细信息。如果调用data[2]、data[3]和data[4],我还可以返回Fri、Sat和Sun。如果我尝试数据[1],它就会爆炸。这是“星期二,星期三,星期四”的名单。。我很乐意把这些放在一行上。你知道吗


Tags: 数据importjsontruepandasdatanormalizestarttime

热门问题