2016-04-29 30 views
5

Tôi có một khung dữ liệu mà tôi muốn vẽ bằng matplotlib, nhưng cột chỉ mục là thời gian và tôi không thể vẽ nó.Pandas: Thêm cột mới vào khung dữ liệu là bản sao của cột chỉ mục

Đây là dataframe (df3):

enter image description here

nhưng khi tôi thử như sau:

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

Tôi nhận được một lỗi rõ ràng:

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

Vì vậy, những gì tôi muốn làm là thêm một cột mới vào dataframe của tôi (tên là 'Thời gian) mà tôi chỉ là một bản sao của cột chỉ mục.

Tôi có thể làm như thế nào?

Đây là toàn bộ mã:

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

Cảm ơn bạn !!

+0

siêu, có thể thêm 5-6 dòng 'university2.csv'? – jezrael

Trả lời

5

Tôi nghĩ bạn cần reset_index.

df3.reset_index(inplace=True) 

Hoặc:

df3 = df3.reset_index() 

Nhưng nếu bạn cần cột mới, sử dụng:

df3['new'] = df3.index 

Tôi nghĩ rằng bạn có thể read_csv tốt hơn:

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 

Và sau đó bỏ qua:

#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

Tôi đã thử: df3.reset_index() và sau đó plt.plot (df3 ['magnetic_mag mean'], df3 ['YYYY-MO-DD HH-MI-SS_SSS'], nhãn = 'FDI') - Vẫn giống nhau lỗi. – ValientProcess

+0

hmmm, tôi nghĩ rằng điều này có thể được đánh máy - thử 'print df.columns.tolist()' và sao chép chính xác các tên cột (có thể trong 'YYYY-MO-DD HH-MI-SS_SSS' là typo) – jezrael

+0

lạ, khi tôi đã làm Tôi có các cột không có thời gian một: ['ÁP LỰC ATMOSPHERIC (hPa) có nghĩa là', 'ÁP SUẤT ATM (HPa) std', 'TEMPERATURE (C) có nghĩa là', 'TEMPERATURE (C) std', ' magnetic_mag có nghĩa là ', ' magnetic_mag std '] – ValientProcess

1

Bạn có thể truy cập trực tiếp trong chỉ mục và làm cho nó âm mưu, sau đây là một ví dụ:

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

Các vấn đề liên quan