Как перегруппировать панды в Dataframe? - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу использовать данные из SAP-системы для подачи в модель IForest.Для этого я использую RFC_READ_TABLE, чтобы получить данные.Вывод RFC_READ_TABLE является объектом dict.Когда я помещаю объект dict в панду DataFrame, я получаю не тот DataFrame, который мне нужен, и не знаю, как его получить.Мне нужен DataFrame вроде:

    Col1  Col2  Col3
0:  val01 val02 val03
1:  val11 val12 val13

Но получить DataFrame вроде:

                                                 DATA
0   {'WA': '700,AA ,0017,US ,NEW YORK            ,...

Я считаю, что каждое поле в одной строке.Поля должны быть 700 или AA.И я не могу дать названия столбцов, единственный столбец это ДАННЫЕ.

Я попытался поместить вывод RFC_READ_TABLE непосредственно в pd.DataFrame.Это не удалось, потому что вывод дает

result = conn.call('RFC_READ_TABLE',QUERY_TABLE='SPFLI',DELIMITER=',')
print(result)
Out:
{'DATA': [{'WA': '700,AA ,0017,US ,NEW YORK            ,JFK,US ,SAN        
FRANCISCO       ,SFO,      361 ,110000,140100,2572.0000,MI , , 0'}......
'FIELDS': [{'FIELDNAME': 'MANDT', 'OFFSET': '000000', 'LENGTH':   
'000003', 'TYPE': 'C', 'FIELDTEXT': 'Client'}, ......
'OPTIONS': []}

, поэтому данные, поля и параметры являются ключевыми, а все, что находится позади, является строкой (я думаю)Чтобы избавиться от 'FIELDS' и 'OPTIONS', я делаю:

result = dict(list(result.items())[:1])

Затем я помещаю 'result' в pd.DataFrame:

df = pd.DataFrame.from_dict(result)
print(df)
Out:
                                                 DATA
0   {'WA': '700,AA ,0017,US ,NEW YORK            ,...
1   {'WA': '700,AA ,0064,US ,SAN FRANCISCO       ,...

Так что некоторые значения не являютсяпоказано, и каждое поле строки находится в одном поле.Я хочу что-то вроде этого:

    MANDT   CARRID   CONNID 
0   700      AA        0017
1   700      AA        0064

и т. Д.

Я пытался:

columnnames=['MANDT','CARRID','CONNID',...]
df = pd.DataFrame.from_dict(result,columns=columnnames)

Но получить:

ValueError: невозможно использоватьПараметр столбцов с orient = 'columns'

Итак, я попытался:

orient='index'

Но получить:

AssertionError: 16 переданных столбцов, переданные данные имели 26 столбцов

Я думаю, это не то, что я хочу.

В таблице 26 строк.

1 Ответ

0 голосов
/ 24 декабря 2018

Для создания диктата у меня есть.

d = {'DATA': [{'WA': '700,AA ,0017,US ,NEW YORK            ,JFK,US ,SAN FRANCISCO           
,SFO,      361 ,110000,140100,2572.0000,MI , , 0'}, {'WA': '700,AA ,0064,US ,SAN  
FRANCISCO       ,SFO,US ,NEW YORK            ,JFK,      321 
,090000,172100,2572.0000,MI , , 0'}, {'WA': '700,AZ ,0555,IT ,ROME                
,FCO,DE ,FRANKFURT           ,FRA,      125 ,190000,210500,845.0000 ,MI , , 0'}, 
{'WA': '700,AZ ,0788,IT ,ROME                ,FCO,JP ,TOKYO               ,TYO,      
775 ,120000,085500,6130.0000,MI , , 1'}, {'WA': '700,AZ ,0789,JP ,TOKYO               
,TYO,IT ,ROME                ,FCO,      940 ,114500,192500,6130.0000,MI , , 0'}, 
{'WA': '700,AZ ,0790,IT ,ROME                ,FCO,JP ,OSAKA               ,KIX,      
815 ,103500,081000,6030.0000,MI ,X, 1'}, {'WA': '700,DL ,0106,US ,NEW YORK            
,JFK,DE ,FRANKFURT           ,FRA,      475 ,193500,093000,3851.0000,MI , , 1'}, 
{'WA': '700,DL ,1699,US ,NEW YORK            ,JFK,US ,SAN FRANCISCO       ,SFO,      
382 ,171500,203700,2572.0000,MI , , 0'}, {'WA': '700,DL ,1984,US ,SAN FRANCISCO       
,SFO,US ,NEW YORK            ,JFK,      325 ,100000,182500,2572.0000,MI , , 0'}, 
{'WA': '700,JL ,0407,JP ,TOKYO               ,NRT,DE ,FRANKFURT           ,FRA,      
725 ,133000,173500,9100.0000,KM , , 0'}, {'WA': '700,JL ,0408,DE ,FRANKFURT           
,FRA,JP ,TOKYO               ,NRT,      675 ,202500,154000,9100.0000,KM ,X, 1'}, 
{'WA': '700,LH ,0400,DE ,FRANKFURT           ,FRA,US ,NEW YORK            ,JFK,      
444 ,101000,113400,6162.0000,KM , , 0'}, {'WA': '700,LH ,0401,US ,NEW YORK            
,JFK,DE ,FRANKFURT           ,FRA,      435 ,183000,074500,6162.0000,KM , , 1'}, 
{'WA': '700,LH ,0402,DE ,FRANKFURT           ,FRA,US ,NEW YORK            ,JFK,      
455 ,133000,150500,6162.0000,KM ,X, 0'}, {'WA': '700,LH ,2402,DE ,FRANKFURT           
,FRA,DE ,BERLIN              ,SXF,       65 ,103000,113500,555.0000 ,KM , , 0'}, 
{'WA': '700,LH ,2407,DE ,BERLIN              ,TXL,DE ,FRANKFURT           ,FRA,       
65 ,071000,081500,555.0000 ,KM , , 0'}, {'WA': '700,QF ,0005,SG ,SINGAPORE           
,SIN,DE ,FRANKFURT           ,FRA,      825 ,225000,053500,*000.0000,KM , , 1'}, 
{'WA': '700,QF ,0006,DE ,FRANKFURT           ,FRA,SG ,SINGAPORE           ,SIN,      
670 ,205500,150500,*000.0000,KM , , 1'}, {'WA': '700,SQ ,0002,SG ,SINGAPORE           
,SIN,US ,SAN FRANCISCO       ,SFO,     1105 ,170000,192500,8452.0000,MI , , 0'}, 
{'WA': '700,SQ ,0015,US ,SAN FRANCISCO       ,SFO,SG ,SINGAPORE           ,SIN,     
1125 ,160000,024500,8452.0000,MI , , 2'}, {'WA': '700,SQ ,0158,SG ,SINGAPORE           
,SIN,ID ,JAKARTA             ,JKT,       95 ,152500,160000,560.0000 ,MI , , 0'}, 
{'WA': '700,SQ ,0988,SG ,SINGAPORE           ,SIN,JP ,TOKYO               ,TYO,      
400 ,163500,001500,3125.0000,MI , , 1'}, {'WA': '700,UA ,0941,DE ,FRANKFURT           
,FRA,US ,SAN FRANCISCO       ,SFO,      696 ,143000,170600,5685.0000,MI , , 0'}, 
{'WA': '700,UA ,3504,US ,SAN FRANCISCO       ,SFO,DE ,FRANKFURT           ,FRA,      
630 ,150000,103000,5685.0000,MI , , 1'}, {'WA': '700,UA ,3516,US ,NEW YORK            
,JFK,DE ,FRANKFURT           ,FRA,      445 ,162000,054500,6162.0000,KM , , 1'}, 
{'WA': '700,UA ,3517,DE ,FRANKFURT           ,FRA,US ,NEW YORK            ,JFK,      
495 ,104000,125500,6162.0000,KM , , 0'}], 'FIELDS': [{'FIELDNAME': 'MANDT', 
'OFFSET': '000000', 'LENGTH': '000003', 'TYPE': 'C', 'FIELDTEXT': 'Client'}, 
{'FIELDNAME': 'CARRID', 'OFFSET': '000004', 'LENGTH': '000003', 'TYPE': 'C', 
'FIELDTEXT': 'Airline Code'}, {'FIELDNAME': 'CONNID', 'OFFSET': '000008', 
'LENGTH': '000004', 'TYPE': 'N', 'FIELDTEXT': 'Flight Connection Number'}, 
{'FIELDNAME': 'COUNTRYFR', 'OFFSET': '000013', 'LENGTH': '000003', 'TYPE': 'C', 
'FIELDTEXT': 'Country Key'}, {'FIELDNAME': 'CITYFROM', 'OFFSET': '000017',  
'LENGTH': '000020', 'TYPE': 'C', 'FIELDTEXT': 'Departure city'}, {'FIELDNAME': 
'AIRPFROM', 'OFFSET': '000038', 'LENGTH': '000003', 'TYPE': 'C', 'FIELDTEXT': 
'Departure airport'}, {'FIELDNAME': 'COUNTRYTO', 'OFFSET': '000042', 'LENGTH': 
'000003', 'TYPE': 'C', 'FIELDTEXT': 'Country Key'}, {'FIELDNAME': 'CITYTO', 
'OFFSET': '000046', 'LENGTH': '000020', 'TYPE': 'C', 'FIELDTEXT': 'Arrival city'}, 
{'FIELDNAME': 'AIRPTO', 'OFFSET': '000067', 'LENGTH': '000003', 'TYPE': 'C', 
'FIELDTEXT': 'Destination airport'}, {'FIELDNAME': 'FLTIME', 'OFFSET': '000071', 
'LENGTH': '000010', 'TYPE': 'I', 'FIELDTEXT': 'Flight time'}, {'FIELDNAME': 
'DEPTIME', 'OFFSET': '000082', 'LENGTH': '000006', 'TYPE': 'T', 'FIELDTEXT': 
'Departure time'}, {'FIELDNAME': 'ARRTIME', 'OFFSET': '000089', 'LENGTH': 
'000006', 'TYPE': 'T', 'FIELDTEXT': 'Arrival time'}, {'FIELDNAME': 'DISTANCE', 
'OFFSET': '000096', 'LENGTH': '000009', 'TYPE': 'P', 'FIELDTEXT': 'Distance'}, 
{'FIELDNAME': 'DISTID', 'OFFSET': '000106', 'LENGTH': '000003', 'TYPE': 'C', 
'FIELDTEXT': 'Mass unit of distance (kms, miles)'}, {'FIELDNAME': 'FLTYPE', 
'OFFSET': '000110', 'LENGTH': '000001', 'TYPE': 'C', 'FIELDTEXT': 'Flight type'}, 
{'FIELDNAME': 'PERIOD', 'OFFSET': '000112', 'LENGTH': '000003', 'TYPE': 'b', 
'FIELDTEXT': 'Arrival n day(s) later'}], 'OPTIONS': []}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...