Создание фрейма данных pandas из словаря и с различными типами значений - PullRequest
0 голосов
/ 20 февраля 2019

Я действительно не привык к пандам, поэтому вопрос о том, как решить эту проблему:

У меня есть словарь под названием table, который похож на:

table = dict()
table[(1, 1)] = [1000, (1.05, 1.02), [Class1(1.05), Class1(1.02)]]
table[(2, 3)] = [3400, (1.8, 2.9), [Class1(1.8), Class1(2.9)]]
table[(4, 5, 5)] = [2800, (4, 5.2, 5.1), [Class1(4), Class1(5.2), Class1(5.1)]]

Вэта схема ввода, пользовательский класс, называется Class1.Этот класс не относится к фрейму данных Pandas, так как он будет потерян при переносе из словаря в фрейм данных.Выходной кадр данных, который я ищу, содержит только 3 столбца: key, replacement key и integer, где key - ключ словаря, replacement key - второе значение списка и integer - первое значение.списка.

Index          key             Replacement key        Integer
1              (1, 1)          (1.05, 1.02)           1000
2              (2, 3)          (1.8, 2.9)             3400
3              (4, 5, 5)       (4, 5.2, 5.1)          2800

В данный момент я пытался создать пустой фрейм данных и заполнять его построчно.Однако мне не удалось получить доступ к каждой строке и заменить ее.

headers = ['Key','Integer', 'Replacement key']
index = range(1, len(table)+1)
df = pd.DataFrame(index=index, columns=headers)

В конце я также хотел бы экспортировать этот кадр данных в формат .csv (для открытия и настройки в Excel).

Спасибо за помощь:)

1 Ответ

0 голосов
/ 20 февраля 2019

Попробуйте:

df = pd.DataFrame.from_dict(table, orient='index').reset_index().iloc[:,:3]
df.columns =['Key','Integer', 'Replacement key']
# swap the column integer and replacement key
df = df[['Key','Replacement key','Integer']]
print(df)

# export .csv
df.to_csv('test.csv')


         Key Replacement key  Integer
0     (1, 1)    (1.05, 1.02)     1000
1     (2, 3)      (1.8, 2.9)     3400
2  (4, 5, 5)   (4, 5.2, 5.1)     2800

Объясните

from_dict() преобразует ключ словаря в индекс каждой строки, когда orient='index'.

df = pd.DataFrame.from_dict(table, orient='index')
print(df)
              0              1                                                  2
(1, 1)     1000   (1.05, 1.02)  [<__main__.Class1 object at 0x7f0f270b6940>, <...
(2, 3)     3400     (1.8, 2.9)  [<__main__.Class1 object at 0x7f0f270b69e8>, <...
(4, 5, 5)  2800  (4, 5.2, 5.1)  [<__main__.Class1 object at 0x7f0f270c19b0>, <...

То есть Reset_index() используется для освобождения ключей в виде столбцов.iloc используется для хранения первых трех столбцов, потому что вам не нужны столбцы класса 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...