无法使用json_normalize

时间:2019-02-13 00:55:15

标签: python json pandas

我正在尝试使用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],它会炸毁。这是“星期二,星期三,星期四”的列表。如果这些内容显示在一行上,我将感到非常高兴。

0 个答案:

没有答案