Пандас кортеж со значением и словарь в dataframe - PullRequest
0 голосов
/ 21 ноября 2018

В настоящее время у меня есть данные в следующей форме:

т.е..

[ ('ab', {'a' : [apple1], 'b': [ball1]}), ('cd', {'a' : [apple2], 'b':   [ball2]})]  

List [Tuple [Any, dict {'key': List}]]

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

start   a             b
ab    apple1         ball1
cd    apple2         ball2

Я попытался сделать это следующим образом:

df = pd.DataFrame(columns=['start', 'a', 'b'])
for start, details in mylist:
    df = df.append({'start' : start}, ignore_index= True)
    df = df.append({'a' : details['a']} , ignore_index= True)
    df = df.append({'b': details['b']}, ignore_index=True)

Я пытаюсь выяснить,оптимизированный способ сделать это.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Примерно так:

form = [ ('ab', {'a' : ['apple1'], 'b': ['ball1']}), ('cd', {'a' : ['apple2'], 'b':   ['ball2']})]

# separate 'start' from rest of data - inverse zip
start, data = zip(*form)

# create dataframe
df = pd.DataFrame(list(data))

# remove data from lists in each cell
df = df.applymap(lambda l: l[0])

df.insert(loc=0, column='start', value=start)

print(df)
     start     a      b
0    ab   apple1  ball1
1    cd   apple2  ball2

или, если вы хотите, чтобы в качестве индекса начинался индекс данных:

# separate 'start' from rest of data - inverse zip
index, data = zip(*form)

# create dataframe
df = pd.DataFrame(list(data), index=index)
df.index.name = 'start' 

# remove data from lists in each cell
df = df.applymap(lambda l: l[0])

print(df)
start     a      b
ab   apple1  ball1
cd   apple2  ball2
0 голосов
/ 21 ноября 2018

pd.DataFrame.from_dict

Панды хорошо работают со словарем или списком словарей.У вас есть что-то среднее.В этом случае преобразование в словарь тривиально:

L = [('ab', {'a' : ['apple1'], 'b': ['ball1']}),
     ('cd', {'a' : ['apple2'], 'b': ['ball2']})]

res = pd.DataFrame.from_dict(dict(L), orient='index')
res = res.apply(lambda x: x.str[0])

print(res)

         a      b
ab  apple1  ball1
cd  apple2  ball2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...