Pandas:向数据框添加新列,该列是索引列的副本

2024-12-31 08:37:00
admin
原创
126
摘要:问题描述:我有一个数据框,想用 matplotlib 绘制它,但是索引列是时间,所以我无法绘制它。这是数据框(df3):但是当我尝试以下操作时:plt.plot(df3['magnetic_mag mean'], df3['YYYY-MO-DD HH-MI-SS_SSS'], label='FDI') 我显然...

问题描述:

我有一个数据框,想用 matplotlib 绘制它,但是索引列是时间,所以我无法绘制它。

这是数据框(df3):

在此处输入图片描述

但是当我尝试以下操作时:

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

我显然收到了一个错误:

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

所以我想要做的是向我的数据框添加一个新的额外列(名为“时间”),它只是索引列的副本。

我该怎么做?

这是整个代码:

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

谢谢 !!


解决方案 1:

我认为你需要reset_index

df3 = df3.reset_index()

可能的解决方案,但我认为inplace这不是好的做法,请检查这个和这个:

df3.reset_index(inplace=True)

但是如果您需要新的列,请使用:

df3['new'] = df3.index

我认为你可以read_csv做得更好:

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

然后省略:

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

编辑:如果是 MultiIndex 或Index来自 groupby 操作,可能的解决方案是:

df = pd.DataFrame({'A':list('aaaabbbb'),
                   'B':list('ccddeeff'),
                   'C':range(8),
                   'D':range(4,12)})
print (df)
   A  B  C   D
0  a  c  0   4
1  a  c  1   5
2  a  d  2   6
3  a  d  3   7
4  b  e  4   8
5  b  e  5   9
6  b  f  6  10
7  b  f  7  11

df1 = df.groupby(['A','B']).sum()
print (df1)
      C   D
A B        
a c   1   9
  d   5  13
b e   9  17
  f  13  21

添加参数as_index=False

df2 = df.groupby(['A','B'], as_index=False).sum()
print (df2)
   A  B   C   D
0  a  c   1   9
1  a  d   5  13
2  b  e   9  17
3  b  f  13  21

或者添加reset_index

df2 = df.groupby(['A','B']).sum().reset_index()
print (df2)
   A  B   C   D
0  a  c   1   9
1  a  d   5  13
2  b  e   9  17
3  b  f  13  21

解决方案 2:

您可以直接访问索引并绘制图表,以下是示例:

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()

在此处输入图片描述

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

在此处输入图片描述

解决方案 3:

您还可以使用eval来实现这一点:

In [2]: df = pd.DataFrame({'num': range(5), 'date': pd.date_range('2022-06-30', '2022-07-04')}, index=list('ABCDE'))

In [3]: df
Out[3]: 
   num       date
A    0 2022-06-30
B    1 2022-07-01
C    2 2022-07-02
D    3 2022-07-03
E    4 2022-07-04

In [4]: df.eval('index_copy = index')
Out[4]: 
   num       date index_copy
A    0 2022-06-30          A
B    1 2022-07-01          B
C    2 2022-07-02          C
D    3 2022-07-03          D
E    4 2022-07-04          E
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用