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
重命名为另一个值-在转换为datetime
idxmin=idxmin.rename(index={'02-29':'02-28')
之前使用。如果您选中,则
scatter
需要两个轴上的数字。因此可以使用,例如
2015max
vs
idxmax
。如果只需要索引中的年份(如果理解正确),则有必要通过
idxmin['years']=idxmin.index.year
创建新列,然后使用
2015max
vs
years
print (idxmin.index[pd.isnull(pd.to_datetime(idxmin.index, format='%m-%d',errors='coerce'))])
Index(['04-35'], dtype='object')