Преобразование dict в фрейм данных дает слишком много строк

#python #python-3.x #pandas #dataframe

#питон #python-3.x #панды #фрейм данных

Вопрос:

Я пытаюсь преобразовать дикт в фрейм данных Pandas следующим образом:

 dff = pd.DataFrame( { 'CEO': 'ucMMe Mhll',  'address': 'vs5dlt3 B Se1kC eve0nre',  'address2': '-',  'city': 'a CSatanral',  'companyName': 'Agilent Technologies Inc.',  'country': 'nUatei tdetSs',  'description': "tns oo el' yty",  'employees': 17124,  'exc': 'gdgdgd',  'industry': 'sgeiTeotiroaLbtans r',  'issueType': 'abc',  'phone': '14087832319',  'primarySicCode': 4008,  'sector': ',atnSii Scilcofe,nnse TecisaPliinafs cedorhv cre',  'securityName': 'elooIne.nen htc iisTcgAgl',  'state': 'ailairofnC',  'symbol': 'A',  'tags': ['nllh he', 'gth', 'acsl', 'isiad', 'nr aitT'],  'website': 'win.gcm.',  'zip': '0752501-19'} )  

И когда я распечатываю фрейм данных, я вижу следующий вывод:

 print(dff)  

введите описание изображения здесь

Я ожидаю увидеть 1 строку только в кадре данных, но она дает 5. И я не могу понять, почему. Что я здесь делаю не так?

Комментарии:

1. Это связано с тем, что в вашей строке тегов 5, поэтому она пытается «заполнить пробелы для остальных». Чтобы исправить это, поместите вокруг него второй слой скобок, чтобы он рассматривал его как одну строку, а не 5.

2. Не знал этого, спасибо @LarrytheLlama

Ответ №1:

Ты не делаешь ничего плохого. Поскольку tags это список, Pandas транслирует все остальные поля того же размера, что и фрейм данных, tags и создает его. Вы можете сделать:

 pd.Series(your_dict).to_frame().T  

Или оберните свой диктант вокруг [] указания, что это строка (ориентация записи):

 pd.DataFrame([your_dict])  

Комментарии:

1. просто блестяще! Спасибо!

Ответ №2:

Это связано с тем, что в вашей строке тегов 5, поэтому она пытается «заполнить пробелы для остальных». Чтобы исправить это, поместите вокруг него второй слой скобок, чтобы он рассматривал его как одну строку, а не 5.

 dff = pd.DataFrame( { 'CEO': 'ucMMe Mhll',  'address': 'vs5dlt3 B Se1kC eve0nre',  'address2': '-',  'city': 'a CSatanral',  'companyName': 'Agilent Technologies Inc.',  'country': 'nUatei tdetSs',  'description': "tns oo el' yty",  'employees': 17124,  'exc': 'gdgdgd',  'industry': 'sgeiTeotiroaLbtans r',  'issueType': 'abc',  'phone': '14087832319',  'primarySicCode': 4008,  'sector': ',atnSii Scilcofe,nnse TecisaPliinafs cedorhv cre',  'securityName': 'elooIne.nen htc iisTcgAgl',  'state': 'ailairofnC',  'symbol': 'A',  'tags': [['nllh he', 'gth', 'acsl', 'isiad', 'nr aitT']], # Double brackets to indicate 1 cell  'website': 'win.gcm.',  'zip': '0752501-19'} )  

Ответ №3:

Вы можете поместить каждое значение словаря в список:

 dff = pd.DataFrame({k: [v] for k,v in dct.items()})  gt;gt;gt; dff  CEO address ... website zip 0 ucMMe Mhll vs5dlt3 B Se1kC eve0nre ... win.gcm. 0752501-19  [1 rows x 20 columns]  

Комментарии:

1. Спасибо @not_speshal

2. @edn — Рад помочь! 🙂