Преобразование значений ряда со значениями словаря в DataFrame. Не сама серия

1

У меня есть серия, которая выглядит так:

d1 = {'Class': 'A', 'age':35, 'Name': 'Manoj'}
d2 = {'Class': 'B', 'age':15, 'Name': 'Mot'}
d3 = {'Class': 'B', 'age':25, 'Name': 'Vittoo'}

ser = [d1, d2, d3]

dummy = pd.Series(ser)
dummy
0     {'Class': 'A', 'age': 35, 'Name': 'Manoj'}
1     {'Class': 'B', 'age': 15, 'Name': 'Mot'}
2    {'Class': 'B', 'age': 25, 'Name': 'Vittoo'}

Когда я использую функцию to_frame, она делает следующее:

dummy.to_frame()

                      0
0   {'Class': 'A', 'age': 35, 'Name': 'Manoj'}
1   {'Class': 'B', 'age': 15, 'Name': 'Mot'}
2   {'Class': 'B', 'age': 25, 'Name': 'Vittoo'}

Но я хотел бы получить следующее:

Class   Name    age
0   A   Manoj   35
1   B   Mot     15
2   B   Vittoo  25

Я пробовал это, что прекрасно работает:

df = pd.DataFrame(dummy)
df = df[0].apply(pd.Series)
df

Но это кажется очень неэффективным, потому что мне нужно преобразовать серию в фреймворк данных и снова применить функцию Series к полному файловому кадру. Поскольку я работаю с миллионами строк, я хотел бы знать, есть ли более эффективное решение.

Теги:
pandas
python-3.x

1 ответ

1
Лучший ответ

Используйте конструктор DataFrame вместо конструктора Series:

d1 = {'Class': 'A', 'age':35, 'Name': 'Manoj'}
d2 = {'Class': 'B', 'age':15, 'Name': 'Mot'}
d3 = {'Class': 'B', 'age':25, 'Name': 'Vittoo'}

ser = [d1, d2, d3]

df = pd.DataFrame(ser)
print (df)
  Class    Name  age
0     A   Manoj   35
1     B     Mot   15
2     B  Vittoo   25

Если входные данные Series fiiled словарей преобразовать его в списки до DataFrame конструктора, to_frame не надо:

dummy = pd.Series(ser)

df = pd.DataFrame(dummy.values.tolist())
print (df)
  Class    Name  age
0     A   Manoj   35
1     B     Mot   15
2     B  Vittoo   25
  • 0
    Ранее я непосредственно добавил конструктор Series в конструктор, который дал тот же результат, что и to_frame. Должен ли я преобразовать значения ряда в список, а затем использовать конструктор DataFrame?
  • 0
    @MohitMotwani - да, именно так. df = pd.DataFrame(pd.Series(ser).values.tolist())

Ещё вопросы

Сообщество Overcoder
Наверх
Меню