Ho una tabella memorizzata in un file Excel come segue:Memorizzazione delle colonne di un foglio di calcolo in un dizionario Python
Species Garden Hedgerow Parkland Pasture Woodland Blackbird 47 10 40 2 2 Chaffinch 19 3 5 0 2 Great Tit 50 0 10 7 0 House Sparrow 46 16 8 4 0 Robin 9 3 0 0 2 Song Thrush 4 0 6 0 0
Sto usando la libreria xlrd
Python per la lettura di questi dati. Non ho alcun problema la lettura in una lista di liste (con ogni riga della tabella memorizzata come una lista), usando il codice seguente:
from xlrd import open_workbook
wb = open_workbook("Sample.xls")
headers = []
sdata = []
for s in wb.sheets():
print "Sheet:",s.name
if s.name.capitalize() == "Data":
for row in range(s.nrows):
values = []
for col in range(s.ncols):
data = s.cell(row,col).value
if row == 0:
headers.append(data)
else:
values.append(data)
sdata.append(values)
Come è probabilmente ovvio, headers
è un semplice elenco memorizzare le intestazioni delle colonne e sdata
contiene i dati della tabella, memorizzati come un elenco di elenchi. Ecco quello che sembrano:
intestazioni:
[u'Species', u'Garden', u'Hedgerow', u'Parkland', u'Pasture', u'Woodland']
sdata:
[[u'Blackbird', 47.0, 10.0, 40.0, 2.0, 2.0], [u'Chaffinch', 19.0, 3.0, 5.0, 0.0, 2.0], [u'Great Tit', 50.0, 0.0, 10.0, 7.0, 0.0], [u'House Sparrow', 46.0, 16.0, 8.0, 4.0, 0.0], [u'Robin', 9.0, 3.0, 0.0, 0.0, 2.0], [u'Song Thrush', 4.0, 0.0, 6.0, 0.0, 0.0]]
Ma voglio memorizzare questi dati in un dizionario Python, con ogni colonna come chiave per un elenco contenente tutti i valori per ogni colonna. Per esempio (solo una parte dei dati vengono visualizzati per risparmiare spazio):
dict = {
'Species': ['Blackbird','Chaffinch','Great Tit'],
'Garden': [47,19,50],
'Hedgerow': [10,3,0],
'Parkland': [40,5,10],
'Pasture': [2,0,7],
'Woodland': [2,2,0]
}
Quindi, la mia domanda è: come posso raggiungere questo obiettivo? So che potrei leggere i dati per colonne anziché per righe come nel frammento di codice sopra, ma non sono riuscito a capire come memorizzare le colonne in un dizionario.
Grazie in anticipo per qualsiasi tipo di assistenza è possibile fornire.
A proposito, panda fa tutto questo in una sola volta, producendo un oggetto dataframe, che può essere utilizzato tanto come il dizionario. – mdurant
Ti suggerisco di pubblicare l'elenco delle liste che hai ora. Darebbe alle persone un modo semplice per testare le loro risposte: trasformare ciò che hai in ciò che vuoi, per questo esempio. –
Grazie per il suggerimento, Emilio, lo fornirò. – maurobio