我正在尝试绘制一条日曲线,它显示了指定持续时间的数据。使用下面的代码。
为了代码起见,我放入了一个示例数据帧(原始数据帧有数千行和几列(
面对标记为#<---------------的行中的错误
为什么我要面对这个错误,我该如何解决它?
import pandas as pd
import matplotlib as pt
from matplotlib import dates as d
import datetime as dt
import matplotlib.pyplot as plt
import numpy as np
dataframe = pd.DataFrame(
columns = ['From Date', 'NO', 'NO2', 'NOx', 'CO', 'Ozone'],
data = [
['2018-12-30 00:00:00', 5.856666, 39.208341, 28.97, 331.280881, 19.778900],
['2018-12-30 01:00:00', 4.050059, 16.262145, 13.53, 454.031703, 25.075286],
['2018-12-30 02:00:00', 4.057806, 15.293990, 12.96, 466.502681, 24.825294],
['2018-12-30 03:00:00', 3.835476, 13.526193, 11.71, 446.526784, 25.033312],
['2018-12-30 04:00:00', 4.230690, 11.251531, 10.70, 355.638469, 25.748796],
['2020-01-01 00:00:00', 1, 2, 6.91, 4, 5]])
dataframe['From Date'] = pd.to_datetime(dataframe['From Date'])
dataframe.replace('NoData', np.nan, inplace= True)
dataframe['Ozone']=dataframe['Ozone'].astype(float)
dataframe['NOx']=dataframe['NOx'].astype(float)
dataframe['NO']=dataframe['NO'].astype(float)
dataframe['NO2']=dataframe['NO2'].astype(float)
dataframe['Month'] = dataframe.index.map(lambda x: x.strftime("%m")) # <--------------
dataframe['Time'] = dataframe.index.map(lambda x: x.strftime("%H:%M"))
# Get the Unique Months
months = dataframe['Month'].unique()
# Creates subplots based on the number of months
fig, axes = plt.subplots(len(months),figsize=(8, 50))
# Iterate over axes and months together
for month, ax in zip(months, axes):
df = dataframe.loc[dataframe['Month'] == month]
df = df.groupby('Time').describe()
ax.plot(df.index, df['Ozone']['50%'], linewidth=6.0, label=month)
ax.plot(df.index, df['Ozone']['75%'], color='g')
ax.plot(df.index, df["Ozone"]['25%'], color='r')
ax.fill_between(df.index, df["Ozone"]['50%'], df["Ozone"]['75%'], alpha=.5, facecolor='g')
ax.fill_between(df.index, df["Ozone"]['50%'], df["Ozone"]['25%'], alpha=.5, facecolor='r')
ax.legend()
ticks = ax.get_xticks()
ax.set_xticks(np.linspace(ticks[0], d.date2num(
d.num2date(ticks[-1]) + dt.timedelta(hours=3)), 5))
ax.set_xticks(np.linspace(ticks[0], d.date2num(
d.num2date(ticks[-1]) + dt.timedelta(hours=3)), 25), minor=True)
ax.set_title("Ozone conc")
ax.set_xlabel("Time")
ax.set_ylabel("Concn in ppb")
fig.tight_layout(pad=2.0)
尝试:
dataframe['Month'] = dataframe['From Date'].dt.month
或由@It_is_Chris建议:
# After dataframe['From Date'] = pd.to_datetime(dataframe['From Date'])
dataframe = dataframe.set_index('From Date')
...
dataframe['Month'] = dataframe.index.month
>>> dataframe['Month']
0 12
1 12
2 12
3 12
4 12
5 1
Name: Month, dtype: int64