如何在Python中将其放入数据帧中?

2024-05-23 19:33:10 发布

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

我有一个API列表:

[[{'$type': 'Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities',
   'id': 'piccadilly',
   'name': 'Piccadilly',
   'modeName': 'tube',
   'disruptions': [],
   'created': '2019-08-20T16:25:25.35Z',
   'modified': '2019-08-20T16:25:25.35Z',
   'lineStatuses': [],
   'routeSections': [],
   'serviceTypes': [{'$type': 'Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities',
     'name': 'Regular',
     'uri': '/Line/Route?ids=Piccadilly&serviceTypes=Regular'},
    {'$type': 'Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities',
     'name': 'Night',
     'uri': '/Line/Route?ids=Piccadilly&serviceTypes=Night'}],
   'crowding': {'$type': 'Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities'}}],
 [{'$type': 'Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities',
   'id': 'victoria',
   'name': 'Victoria',
   'modeName': 'tube',
   'disruptions': [],
   'created': '2019-08-20T16:25:25.36Z',
   'modified': '2019-08-20T16:25:25.36Z',
   'lineStatuses': [],
   'routeSections': [],
   'serviceTypes': [{'$type': 'Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities',
     'name': 'Regular',
     'uri': '/Line/Route?ids=Victoria&serviceTypes=Regular'},
    {'$type': 'Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities',
     'name': 'Night',
     'uri': '/Line/Route?ids=Victoria&serviceTypes=Night'}]

我想得到一个包含以下列的数据帧:id、name、modeName、中断、serviceTypes等等,但我找不到正确的解决方案。你知道吗

这就是我所尝试的:

dflines = pd.DataFrame(columns = ["id", "name", "modeName", "disruptions", "serviceTypes"])

for i, row in range(len(info)):
    id = row["id"]
    name = row["name"]
    modeName = row["modeName"]
    disruptions = row["disruptions"]
    dflines.loc[i] = [id, name, modeName, disruptions, want, serviceTypes]

dflines.head(20)

我得到了这个错误:-----------------------------------------------------

TypeError                                 Traceback (most recent call last)
<ipython-input-80-bec7efd03786> in <module>
      1 dflines = pd.DataFrame(columns = ["id", "name", "modeName", "disruptions", "serviceTypes"])
      2 
----> 3 for i, row in range(len(info)):
      4     id = row["id"]
      5     name = row["name"]

TypeError: cannot unpack non-iterable int object

有人能帮我吗?你知道吗


Tags: nameapiidtypeservicelineuripresentation
2条回答

您看到的错误是由于您试图从range迭代器中“解包”两个值

for i, row in range(len(info)):

range函数返回单个值的迭代(即0, 1, 2, ...)。你可能想enumerate,像这样:

for i, row in enumerate(info):

enumerate函数返回迭代值加索引,如(0, first_value), (1, second_value), ...

info=[[{'$type': 'Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities',
   'id': 'piccadilly',
   'name': 'Piccadilly',
   'modeName': 'tube',
   'disruptions': [],
   'created': '2019-08-20T16:25:25.35Z',
   'modified': '2019-08-20T16:25:25.35Z',
   'lineStatuses': [],
   'routeSections': [],
   'serviceTypes': [{'$type': 'Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities',
     'name': 'Regular',
     'uri': '/Line/Route?ids=Piccadilly&serviceTypes=Regular'},
    {'$type': 'Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities',
     'name': 'Night',
     'uri': '/Line/Route?ids=Piccadilly&serviceTypes=Night'}],
   'crowding': {'$type': 'Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities'}}],
 [{'$type': 'Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities',
   'id': 'victoria',
   'name': 'Victoria',
   'modeName': 'tube',
   'disruptions': [],
   'created': '2019-08-20T16:25:25.36Z',
   'modified': '2019-08-20T16:25:25.36Z',
   'lineStatuses': [],
   'routeSections': [],
   'serviceTypes': [{'$type': 'Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities',
     'name': 'Regular',
     'uri': '/Line/Route?ids=Victoria&serviceTypes=Regular'},
    {'$type': 'Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities',
     'name': 'Night',
     'uri': '/Line/Route?ids=Victoria&serviceTypes=Night'}]}]]
info = np.squeeze(info).tolist()
dflines = pd.DataFrame(columns = ["id", "name", "modeName", "disruptions", "serviceTypes"])
dfserviceTypes=pd.DataFrame(columns =["$type","name","uri"])
i=0
j=0
for dic in info:
    for key in dic:
        if key in dflines.columns.tolist():
            dflines.loc[i,key]=str(dic[key])

        if key=='serviceTypes':
            for dic2 in dic[key]:
                for key2 in dic2:
                    if key2 in dfserviceTypes.columns.tolist():
                         dfserviceTypes.loc[j,key2]=str(dic2[key2])
                j+=1
    i+=1

请记住,如果将数据帧划分为两个数据帧,则可视化更容易,这样就不必面对将一个数据帧插入另一个数据帧的任务,从而不会丢失信息

dflines

Output:

id  name        modeName    disruptions serviceTypes
0   piccadilly  Piccadilly  tube    []  [{'$type': 'Tfl.Api.Presentation.Entities.Line...
1   victoria    Victoria    tube    []  [{'$type': 'Tfl.Api.Presentation.Entities.Line...

和服务类型:

dfserviceTypes

Output:

    $type                                               name     uri
0   Tfl.Api.Presentation.Entities.LineServiceTypeI...   Regular /Line/Route?ids=Piccadilly&serviceTypes=Regular
1   Tfl.Api.Presentation.Entities.LineServiceTypeI...   Night   /Line/Route?ids=Piccadilly&serviceTypes=Night
2   Tfl.Api.Presentation.Entities.LineServiceTypeI...   Regular /Line/Route?ids=Victoria&serviceTypes=Regular
3   Tfl.Api.Presentation.Entities.LineServiceTypeI...   Night   /Line/Route?ids=Victoria&serviceTypes=Night

相关问题 更多 >