Semplice esempio:Come posso creare un DataFrame panda (con indice o multiindice) dall'elenco delle istanze namedtuple?
>>> 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'
Harder esempio:
>>> 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
Ora pensa che ['ticker', 'date']
è l'indice stesso, piuttosto che le colonne che voglio usare come indice.
C'è un modo per farlo senza ricorrere a un numpy ndarray intermedio o utilizzando set_index
dopo il fatto?
Intelligente. Non avevo realizzato che esistesse un attributo _fields su namedtuples. Potrebbe essere utile aprire un ticket per supportare la costruzione di namedtuples nello stesso modo in cui i dizionari funzionano ora. –
Ho qualcosa insieme, ma penso che questo metodo sia probabilmente buono per la maggior parte dei casi d'uso ... –
Non penso che ci sia un giro intorno a 'set_index', ma è possibile farlo all'interno. –