首页 > 解决方案 > 如何解决错误“int”对象在我的代码中没有属性“strftime”?

问题描述

我正在尝试绘制一条昼夜曲线,该曲线显示指定持续时间的数据。使用下面的代码。

为了代码,我放入了一个示例数据框(原始数据框有数千行和几列)

面对标记为 # <------------- 的行中的错误

为什么我会遇到这个错误,我该如何解决?

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)

标签: pythonpandasdataframematplotlib

解决方案


尝试:

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

推荐阅读