Как преобразовать список парных кортежей в фрейме данных в столбцы

У меня есть столбец dataframe, в котором данные каждой ячейки выглядят так:

[('a', '2000'),('b', '4000'),('d', '5000')].

У некоторых было бы 4 пары с c. Как преобразовать их все в заполнение новых столбцов df['a'] , df['b'] , df['c'] , df['d']?

Из вашего ожидаемого результата кажется, что вам нужно использовать Pandas. Не могли бы вы рассказать нам, что вы пробовали до сих пор?

Ugnius Malūkas 26.10.2018 08:42
1
1
679
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

import pandas as pd 
d=[('a', '2000'),('b', '4000'),('d', '5000')]  
df = pd.DataFrame(data=d).T   
df.columns = df.iloc[0]    
df = df.iloc[1:]    

enter image description here

Другой способ сделать это:

l = [('a', '2000'),('b', '4000'),('d', '5000')]
df = pd.DataFrame([dict(l)])

Если ваши данные похожи на вложенный список кортежей, попробуйте следующее:

df = pd.DataFrame(list(map(dict, l)))

Результат будет таким:

      a     b     d
0  2000  4000  5000
Ответ принят как подходящий

Это нельзя векторизовать. Одним из эффективных решений было бы передать список словарей конструктору pd.DataFrame через list + map с dict:

s = pd.Series([[('a', '2000'),('b', '4000'),('d', '5000')],
               [('a', '1000'),('b', '3000'),('c', '6000'),('d', '7000')]])

# example dataframe
df = pd.DataFrame(s, columns=['data'])

# convert list of tuples to dict for each element in series
res = pd.DataFrame(list(map(dict, df['data'])))

print(res)

      a     b     c     d
0  2000  4000   NaN  5000
1  1000  3000  6000  7000

Другие вопросы по теме