为了账号安全,请及时绑定邮箱和手机立即绑定

'DataFrame' 对象没有属性 'map'

'DataFrame' 对象没有属性 'map'

慕后森 2022-12-14 10:55:41
我在下面有以下命令:datamax['Date'] = pd.to_datetime(datamax['Date'])datamax2015['Date'] = pd.to_datetime(datamax2015['Date'])datamax["day_of_year"] = datamax["Date"].dt.dayofyeardatamax2015["day_of_year"] = datamax["Date"].dt.dayofyeardatamaxappend = datamax2015.join(datamax,on="day_of_year",rsuffix="_new")upper = datamaxappend.loc[datamaxappend["Data_Value_new"]<datamaxappend["Data_Value"]]upper = upper.rename(columns={"Date_new":"Date","Data_Value_new":"Data_Value"})lower = lower.rename(columns={"Date_new":"Date","Data_Value_new":"Data_Value"})upper['Date'] = upper['Date'].map(lambda x: x.strftime("%d/%m/%Y, %H:%M:%S"))lower['Date'] = lower['Date'].map(lambda x: x.strftime("%d/%m/%Y, %H:%M:%S"))  但是,我不断收到错误消息:'DataFrame' 对象没有属性 'map'我对这是为什么感到困惑。有人可以帮我吗?下方的数据框如下所示:上:     Date           ID Element  Data_Value  day_of_year       Date  \3  2015-01-04  USW00094889    TMAX          44            4 2005-01-05   4  2015-01-05  USW00094889    TMAX          28            5 2005-01-06   5  2015-01-06  USW00094889    TMAX          33            6 2005-01-07   14 2015-01-15  USW00094889    TMAX          -5           15 2005-01-16   15 2015-01-16  USW00094889    TMAX           6           16 2005-01-17            ID_new Element_new  Data_Value  day_of_year_new  3   USW00094889        TMAX          33                5  4   USW00094889        TMAX           0                6  5   USW00094889        TMAX           6                7  14  USW00094889        TMAX         -33               16  15  USW00094889        TMAX         -50               17  
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

upperlower数据框有两列称为Date. 您正在使用upper['Date'].

解决方案:将至少一列重命名为不同于日期的某项,然后将您的函数分别应用于每一列。


查看完整回答
反对 回复 2022-12-14
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

  1. 返回 2005 年至 2014 年期间一年中各天的创纪录高温和低温记录折线图的 Python 代码。每天创纪录的最高气温和最低气温之间的区域应该用阴影标出。

  2. 然后,为 2015 年打破十年记录(2005-2014 年)历史高点或历史低点的任何点(高点和低点)叠加 2015 年数据的散点图。

  3. 删除闰年日期(即 2 月 29 日)。

from datetime import datetime

import pandas as pd

import matplotlib.pyplot as plt


pd.set_option("display.max_rows",None,"display.max_columns",None)

data = pd.read_csv('data/C2A2_data/BinnedCsvs_d400/fb441e62df2d58994928907a91895ec62c2c42e6cd075c2700843b89.csv') 

newdata = data[(data['Date'] >= '2005-01-01') & (data['Date'] <= '2014-12-12')]

datamax = newdata[newdata['Element']=='TMAX']

datamin = newdata[newdata['Element']=='TMIN']

datamax['Date'] = pd.to_datetime(datamax['Date'])

datamin['Date'] = pd.to_datetime(datamin['Date'])

datamax["day_of_year"] = datamax["Date"].dt.dayofyear

datamax = datamax.groupby('day_of_year').max()

datamin["day_of_year"] = datamin["Date"].dt.dayofyear

datamin = datamin.groupby('day_of_year').min()

datamax = datamax.reset_index()

datamin = datamin.reset_index()

datamin['Date'] = datamin['Date'].dt.strftime('%Y-%m-%d')

datamax['Date'] = datamax['Date'].dt.strftime('%Y-%m-%d')

datamax = datamax[~datamax['Date'].str.contains("02-29")]

datamin = datamin[~datamin['Date'].str.contains("02-29")]


breakoutdata = data[(data['Date']  > '2014-12-31')]

datamax2015 = breakoutdata[breakoutdata['Element']=='TMAX']

datamin2015 = breakoutdata[breakoutdata['Element']=='TMIN']

datamax2015['Date'] = pd.to_datetime(datamax2015['Date'])

datamin2015['Date'] = pd.to_datetime(datamin2015['Date'])

datamax2015["day_of_year"] = datamax2015["Date"].dt.dayofyear

datamax2015 = datamax2015.groupby('day_of_year').max()

datamin2015["day_of_year"] = datamin2015["Date"].dt.dayofyear

datamin2015 = datamin2015.groupby('day_of_year').min()

datamax2015 = datamax2015.reset_index()

datamin2015 = datamin2015.reset_index()

datamin2015['Date'] = datamin2015['Date'].dt.strftime('%Y-%m-%d')

datamax2015['Date'] = datamax2015['Date'].dt.strftime('%Y-%m-%d')

datamax2015 = datamax2015[~datamax2015['Date'].str.contains("02-29")]

datamin2015 = datamin2015[~datamin2015['Date'].str.contains("02-29")]


dataminappend = datamin2015.join(datamin,on="day_of_year",rsuffix="_new")

lower = dataminappend.loc[dataminappend["Data_Value_new"]>dataminappend["Data_Value"]]

datamaxappend = datamax2015.join(datamax,on="day_of_year",rsuffix="_new")

upper = datamaxappend.loc[datamaxappend["Data_Value_new"]<datamaxappend["Data_Value"]]


upper['Date'] = pd.to_datetime(upper['Date']) 

lower['Date'] = pd.to_datetime(lower['Date']) 

datamax['Date'] = pd.to_datetime(datamax['Date']) 

datamin['Date'] = pd.to_datetime(datamin['Date']) 


ax = plt.gca()

plt.plot(datamax['day_of_year'],datamax['Data_Value'],color='red')

plt.plot(datamin['day_of_year'],datamin['Data_Value'], color='blue')

plt.scatter(upper['day_of_year'],upper['Data_Value'],color='purple')

plt.scatter(lower['day_of_year'],lower['Data_Value'], color='cyan')


plt.ylabel("Temperature (degrees C)",color='navy')

plt.xlabel("Day of the year",color='navy',labelpad=15)

plt.title('Record high and low temperatures by day between 2005-2014)', alpha=1.0,color='brown',y=1.08)

ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.35),fancybox=False,labels=['Record high','Record low'])

plt.xticks(rotation=30)

plt.fill_between(range(len(datamax['Date'])), datamax['Data_Value'], datamin['Data_Value'],color='yellow',alpha=0.8)

plt.show()

  1. 我已使用 Datamin['Date'] = datamin['Date'].dt.strftime('%Y-%m-%d') 将“日期”列转换为字符串。

  2. 然后我使用 upper['Date'] = pd.to_datetime(upper['Date']) 将其转换回 'datetime' 格式

  3. 然后我使用“年份日期”作为 x 值。

在此处输入图像描述


查看完整回答
反对 回复 2022-12-14
  • 2 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号