Python 绘制x标签为月份和日期的图形
我有一个这样的数据帧Python 绘制x标签为月份和日期的图形,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一个这样的数据帧 2015max 2015min idxmax idxmin 01-05 242.0 -54.0 241.0 -127.0 01-26 245.0 -45.0 238.0 -134.0 04-02 298.0 -23.0 280.0 -59.0 04-04 288.0 72.0 283.0 -86.0 04-17 281.0 29.0 278.0 -47.0 我
2015max 2015min idxmax idxmin
01-05 242.0 -54.0 241.0 -127.0
01-26 245.0 -45.0 238.0 -134.0
04-02 298.0 -23.0 280.0 -59.0
04-04 288.0 72.0 283.0 -86.0
04-17 281.0 29.0 278.0 -47.0
我想用它的x标签覆盖任意点的分散数据,如“01-01,01-02,01-03…”
我试着用
idxmin.index = pd.to_datetime(idxmin.index, format='%m-%d',errors='ignore')
但它总是让我想起错误:
ValueError:无法将字符串转换为浮点
是否有人有好主意来解决问题?您的数据中似乎有一些坏值,因此需要参数
error='concurve'
将它们替换为NaT
,然后将NaT
替换为某个值:
print (idxmin)
2015max 2015min idxmax idxmin
01-05 242.0 -54.0 241.0 -127.0
01-26 245.0 -45.0 238.0 -134.0
04-02 298.0 -23.0 280.0 -59.0
04-04 288.0 72.0 283.0 -86.0
04-35 281.0 29.0 278.0 -47.0 <- change last value to bad for testing
idxmin.index = pd.to_datetime(idxmin.index, format='%m-%d',errors='coerce')
print (idxmin)
2015max 2015min idxmax idxmin
1900-01-05 242.0 -54.0 241.0 -127.0
1900-01-26 245.0 -45.0 238.0 -134.0
1900-04-02 298.0 -23.0 280.0 -59.0
1900-04-04 288.0 72.0 283.0 -86.0
NaT 281.0 29.0 278.0 -47.0
idxmin.index = idxmin.index.fillna(pd.to_datetime('01-01-2000'))
print (idxmin)
2015max 2015min idxmax idxmin
1900-01-05 242.0 -54.0 241.0 -127.0
1900-01-26 245.0 -45.0 238.0 -134.0
1900-04-02 298.0 -23.0 280.0 -59.0
1900-04-04 288.0 72.0 283.0 -86.0
2000-01-01 281.0 29.0 278.0 -47.0
我想画一个任意点的散乱数据,其x标签是一年,如“01-01,01-02,01-03…”我想知道为什么1900(年份)存在,而我只想格式化月份和日期。如何绘制一个图表呢?我发现了一个错误的值:Index(['02-29',dtype='object')我认为日期是偶然存在的。那么我该如何解决这个问题呢?对于你的第一个问题-如果需要datetimes,每个日期中都必须有一些默认年份。您可以通过
idxmin.index=pd.to_datetime(idxmin.index,格式='%m-%d',errors='concurve').strftime('%m-%d'))从每个日期获取日和月
,但它与您的输入相同。因此,如果需要一些日期,年份是必要的。对于您的第二个注释-您可以用某个值替换NaT
,或者可以将02-29
重命名为另一个值-在转换为datetimeidxmin=idxmin.rename(index={'02-29':'02-28')
之前使用。如果您选中,则scatter
需要两个轴上的数字。因此可以使用,例如2015max
vsidxmax
。如果只需要索引中的年份(如果理解正确),则有必要通过idxmin['years']=idxmin.index.year
创建新列,然后使用2015max
vsyears
print (idxmin.index[pd.isnull(pd.to_datetime(idxmin.index, format='%m-%d',errors='coerce'))])
Index(['04-35'], dtype='object')