2016-04-29 14 views
5

Mam ramkę danych, którą chcę wydrukować za pomocą matplotlib, ale kolumna indeksu jest czasem i nie mogę jej narysować.Pandy: Dodanie nowej kolumny do ramki danych, która jest kopią kolumny indeksu

To dataframe (DF3):

enter image description here

ale gdy próbuję następujące:

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

Dostaję błąd oczywisto:

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

Tak więc chcę dodać nową kolumnę do mojej ramki danych (o nazwie "Czas") to tylko kopia kolumny indeksu.

Jak mogę to zrobić?

To jest cały kod:

#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') 

Dziękuję !!

+0

Super, możliwe jest dodanie 5-6 linie 'uniwersytetu2.csv'? – jezrael

Odpowiedz

5

Myślę, że potrzebujesz reset_index.

df3.reset_index(inplace=True) 

Lub:

df3 = df3.reset_index() 

Ale jeśli potrzebujesz nowej kolumny, przeznaczenie:

df3['new'] = df3.index 

myślę można read_csv lepiej:

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 

I wtedy pominąć:

#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

Próbowałem już: df3.reset_index(), a następnie plt.plot (df3 ['magnetic_mag mean'], df3 ['YYYY-MO-DD HH-MI-SS_SSS'], label = 'FDI') - Wciąż to samo błąd. – ValientProcess

+0

hmmm, myślę, że to może być literówka - spróbuj 'print df.columns.tolist()' i skopiuj dokładnie nazwy kolumn (może w 'YYYY-MO-DD HH-MI-SS_SSS' jest literówka) – jezrael

+0

dziwne, kiedy to zrobiłem mam kolumny bez czasu pierwszego: ['CIŚNIENIE ATMOSFERYCZNE (hPa) średnie ", ' CIŚNIENIE ATMOSFERYCZNE (hPa) std ', ' TEMPERATURE (C) mean", 'TEMPERATURE (C) std', ' magnetic_mag mean ", 'magnetic_mag std'] – ValientProcess

1

można bezpośrednio przejść do indeksu i dostać ono wykreślone, Oto przykład:

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

Powiązane problemy