2016-04-29 14 views
5

Ho un dataframe che voglio stampare con matplotlib, ma la colonna indice è l'ora e non posso tracciarla.Panda: aggiunta di una nuova colonna al dataframe che è una copia della colonna indice

Questa è la dataframe (DF3):

enter image description here

ma quando provo il seguente:

plt.plot(df3['magnetic_mag mean'], df3['YYYY-MO-DD HH-MI-SS_SSS'], label='FDI') 

che sto ricevendo un errore, ovviamente:

KeyError: 'YYYY-MO-DD HH-MI-SS_SSS' 

Quindi quello che voglio fare è aggiungere una nuova colonna extra al mio dataframe (chiamato 'Time) che io s solo una copia della colonna indice.

Come posso farlo?

Questo è l'intero codice:

#Importing the csv file into df 
df = pd.read_csv('university2.csv', sep=";", skiprows=1) 

#Changing datetime 
df['YYYY-MO-DD HH-MI-SS_SSS'] = pd.to_datetime(df['YYYY-MO-DD HH-MI-SS_SSS'], 
               format='%Y-%m-%d %H:%M:%S:%f') 

#Set index from column 
df = df.set_index('YYYY-MO-DD HH-MI-SS_SSS') 

#Add Magnetic Magnitude Column 
df['magnetic_mag'] = np.sqrt(df['MAGNETIC FIELD X (μT)']**2 + df['MAGNETIC FIELD Y (μT)']**2 + df['MAGNETIC FIELD Z (μT)']**2) 

#Subtract Earth's Average Magnetic Field from 'magnetic_mag' 
df['magnetic_mag'] = df['magnetic_mag'] - 30 

#Copy interesting values 
df2 = df[[ 'ATMOSPHERIC PRESSURE (hPa)', 
      'TEMPERATURE (C)', 'magnetic_mag']].copy() 

#Hourly Average and Standard Deviation for interesting values 
df3 = df2.resample('H').agg(['mean','std']) 
df3.columns = [' '.join(col) for col in df3.columns] 

df3.reset_index() 
plt.plot(df3['magnetic_mag mean'], df3['YYYY-MO-DD HH-MI-SS_SSS'], label='FDI') 

Grazie !!

+0

Super, è possibile aggiungere 5-6 linee di 'university2.csv'? – jezrael

risposta

5

Penso che sia necessario reset_index.

df3.reset_index(inplace=True) 

Oppure:

df3 = df3.reset_index() 

Ma se avete bisogno di nuova colonna, uso:

df3['new'] = df3.index 

penso che si può read_csv meglio:

df = pd.read_csv('university2.csv', 
       sep=";", 
       skiprows=1, 
       index_col='YYYY-MO-DD HH-MI-SS_SSS', 
       parse_dates='YYYY-MO-DD HH-MI-SS_SSS') #if doesnt work, use pd.to_datetime 

E poi omettere:

#Changing datetime 
df['YYYY-MO-DD HH-MI-SS_SSS'] = pd.to_datetime(df['YYYY-MO-DD HH-MI-SS_SSS'], 
               format='%Y-%m-%d %H:%M:%S:%f') 
#Set index from column 
df = df.set_index('YYYY-MO-DD HH-MI-SS_SSS') 
+0

Ho provato: df3.reset_index() e poi plt.plot (df3 ['magnetic_mag mean'], df3 ['YYYY-MO-DD HH-MI-SS_SSS '], label =' FDI ') - Ancora lo stesso errore. – ValientProcess

+0

hmmm, penso che questo possa essere typo - prova 'print df.columns.tolist()' e copia esattamente i nomi delle colonne (forse in 'YYYY-MO-DD HH-MI-SS_SSS' è typo) – jezrael

+0

strano, quando l'ho fatto Ho ottenuto le colonne senza la prima ora: ['PRESSIONE ATMOSFERICA (hPa)', ' ' PRESSIONE ATMOSFERICA (hPa) std ', ' TEMPERATURA (C) significa ', ' TEMPERATURA (C) std ', ' magnetic_mag significa ', ' magnetic_mag std '] – ValientProcess

1

È possibile accedere direttamente nell'indice e farlo tracciati, seguente è un esempio:

import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np 

df = pd.DataFrame(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000)) 

#Get index in horizontal axis 
plt.plot(df.index, df[0]) 
plt.show() 

enter image description here

#Get index in vertiacal axis 
plt.plot(df[0], df.index) 
plt.show() 

enter image description here

Problemi correlati