L'organisation de lecture de données à partir d'Excel dans les Pandas DataFrame
Mon but de ce script est de:
1.lire timseries de données à partir de fichier excel (>100 000 de k lignes) ainsi que des en-têtes (Étiquettes, les Unités)
2.convertir excel numérique des dates pour les meilleurs objet datetime pour les pandas dataFrame
3.Être en mesure d'utiliser les horodatages de référence des lignes et des étiquettes en série de colonnes de référence
Jusqu'à présent j'ai utilisé xlrd de lire les données excel dans une liste. Fait pandas Série avec chaque liste et utilisé la liste des temps comme index. Série combinée avec les en-têtes de série pour faire de python dictionnaire. Passé dictionnaire de pandas DataFrame. En dépit de mes efforts, la df.l'indice semble être pour les en-têtes de colonne et je ne suis pas sûr de quand convertir les dates en objet datetime.
J'ai juste commencé à l'aide de python 3 jours il y a donc tout conseil serait formidable! Voici mon code:
#Open excel workbook and first sheet
wb = xlrd.open_workbook("C:\GreenCSV\Calgary\CWater.xlsx")
sh = wb.sheet_by_index(0)
#Read rows containing labels and units
Labels = sh.row_values(1, start_colx=0, end_colx=None)
Units = sh.row_values(2, start_colx=0, end_colx=None)
#Initialize list to hold data
Data = [None] * (sh.ncols)
#read column by column and store in list
for colnum in range(sh.ncols):
Data[colnum] = sh.col_values(colnum, start_rowx=5, end_rowx=None)
#Delete unecessary rows and columns
del Labels[3],Labels[0:2], Units[3], Units[0:2], Data[3], Data[0:2]
#Create Pandas Series
s = [None] * (sh.ncols - 4)
for colnum in range(sh.ncols - 4):
s[colnum] = Series(Data[colnum+1], index=Data[0])
#Create Dictionary of Series
dictionary = {}
for i in range(sh.ncols-4):
dictionary[i]= {Labels[i] : s[i]}
#Pass Dictionary to Pandas DataFrame
df = pd.DataFrame.from_dict(dictionary)
Merci pour votre commentaire! Je vais donner un coup de feu, mais si c'est quelque chose comme la maladie de parkinson.read_csv je vais devoir utiliser un code comme celui-ci parce que pd.read_csv ne semble fonctionner correctement si il y a une seule ligne d'en-têtes de colonne et pas d'espace avant les données.
Vous pouvez sauter sur la deuxième ligne avec les options 'skiprows'. IMO c'est certainement la peine de regarder les options pour les pd.read_csv (surtout skiprows, skipinitialspace, parse_dates)
OriginalL'auteur pbreach | 2013-07-17
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser les pandas directement ici, j'ai l'habitude de créer un dictionnaire de DataFrames (avec les touches étant le nom de la feuille):
Vous pouvez consulter le docs sur le
parse
, qui propose quelques options en plus (par exempleskiprows
), ce qui vous permet d'analyser les fiches individuelles avec beaucoup plus de contrôle...J'ai converti mon fichier csv et je suis à l'aide de la mp.read_csv et encore, il faut environ 35 secondes. Toujours très lent, mais je suppose que c'est peut-être que de la date de conversion.
OriginalL'auteur Andy Hayden