python - columns - ¿Cómo creo pandas DataFrame(con index o multiindex) de la lista de instancias namedtuple?
pandas set index (1)
Para obtener una Serie de una ruta de nombre, puede usar el atributo _fields
:
In [11]: pd.Series(a, a._fields)
Out[11]:
ticker GE
date 2010-01-01
price 30
dtype: object
Del mismo modo, puede crear un DataFrame como este:
In [12]: df = pd.DataFrame(l, columns=l[0]._fields)
In [13]: df
Out[13]:
ticker date price
0 GE 2010-01-01 30
1 GE 2010-01-02 31
Tienes que set_index
después del hecho, pero puedes hacer esto en el inplace
:
In [14]: df.set_index([''ticker'', ''date''], inplace=True)
In [15]: df
Out[15]:
price
ticker date
GE 2010-01-01 30
2010-01-02 31
Ejemplo simple:
>>> from collections import namedtuple
>>> import pandas
>>> Price = namedtuple(''Price'', ''ticker date price'')
>>> a = Price(''GE'', ''2010-01-01'', 30.00)
>>> b = Price(''GE'', ''2010-01-02'', 31.00)
>>> l = [a, b]
>>> df = pandas.DataFrame.from_records(l, index=''ticker'')
Traceback (most recent call last)
...
KeyError: ''ticker''
Ejemplo más duro:
>>> df2 = pandas.DataFrame.from_records(l, index=[''ticker'', ''date''])
>>> df2
0 1 2
ticker GE 2010-01-01 30
date GE 2010-01-02 31
Ahora cree que [''ticker'', ''date'']
es el índice en sí mismo, en lugar de las columnas que quiero usar como índice.
¿Hay alguna manera de hacer esto sin recurrir a un ndarray numpy intermedio o usar set_index
después del hecho?