web-dev-qa-db-fra.com

Pandas: Ajout d'une nouvelle colonne à la structure de données, qui est une copie de la colonne d'index

J'ai une trame de données que je veux tracer avec matplotlib, mais la colonne d'index est l'heure et je ne peux pas la tracer.

C'est le dataframe (df3):

 enter image description here

mais quand j'essaye ce qui suit:

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

Je reçois une erreur évidemment:

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

Donc, ce que je veux faire, c'est ajouter une nouvelle colonne supplémentaire à mon cadre de données (nommée 'Time'), qui n'est qu'une copie de la colonne d'index.

Comment puis-je le faire?

C'est le code entier:

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

Je vous remercie !!

8
ValientProcess

Je pense que vous avez besoin de reset_index .

df3.reset_index(inplace=True)

Ou:

df3 = df3.reset_index()

Mais si vous avez besoin d'une nouvelle colonne, utilisez:

df3['new'] = df3.index

Je pense que vous pouvez read_csv better:

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

Et puis omettez:

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

Vous pouvez accéder directement à l'index et le tracer. Voici un exemple:

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

1
Abbas