如何将列表转换为DataFrame,其中列表项将作为DataFrame中的列?

时间:2014-12-22 06:34:05

标签: python list pandas dataframe

假设我有一个像下面这样的列表:

L =[
    [11, ['Blue','Green','Yellow'] , 1],
    [21, ['White','Green','Brown'] , 0],
    [31, ['Orange','Yellow']       , 0],
    [41, ['White','Orange','Brown'], 1],
   ] ^           ^^^                 ^
     Id         Colors              vote

如何将此列表转换为颜色为列的DataFrame。

     Id      Blue    Green    Yellow    White    Brown    Orange    vote
0    11      1       1        1         0        0        0         1   
1    21      0       1        0         1        1        0         0
2    31      0       0        1         0        0        1         0 
3    41      0       0        0         1        1        1         1

这里,df [Id] [color]表示Id中是否存在颜色。

我想,我可以用迭代的方式做到这一点。有没有最简单的方法。

1 个答案:

答案 0 :(得分:1)

这是一个(迭代方式)来做,不知道如何进行矢量化。

from itertools import chain
import pandas as pd

L = [
    [11, ['Blue','Green','Yellow'] , 1],
    [21, ['White','Green','Brown'] , 0],
    [31, ['Orange','Yellow']       , 0],
    [41, ['White','Orange','Brown'], 1],
]

colors = set(chain(*(row[1] for row in L)))
def row2obj(row):
    obj = {c: int(c in row[1]) for c in colors}
    obj['id'] = row[0]
    obj['vote'] = row[2]
    return obj

df = pd.DataFrame.from_records(row2obj(row) for row in L)