You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas DataFrame日期列转为数值以绘制折线图?

解决Pandas DataFrame日期列转数值型的问题

嘿,我看你在把DataFrame里的日期列转成数值型、用来绘制折线图的时候遇到了问题,咱们先捋捋你代码里的问题在哪,再给你几个实用的解决办法:

你的代码问题分析

你这段代码的核心问题出在循环逻辑上:当你遍历Datum列的每一个日期字符串时,每次都会覆盖year、month这些变量的值,最后执行赋值语句的时候,只把最后一个日期转换后的数值赋值给了整个floatdate列,导致所有行的floatdate都是同一个值,这肯定不是你想要的结果呀。

方法一:用Pandas内置函数(推荐,高效又省心)

Pandas处理日期时间的工具非常强大,完全不用手动循环解析每一个字符串,几步就能搞定:

import pandas as pd
import matplotlib.dates as mdates

# 第一步:把字符串格式的日期转成Pandas原生的datetime类型
arsenalchelsea['datetime'] = pd.to_datetime(arsenalchelsea['Datum'])

# 第二步:用matplotlib的date2num把datetime转成数值型日期
arsenalchelsea['floatdate'] = mdates.date2num(arsenalchelsea['datetime'])

这种方法不仅代码简洁,处理大数据量时的效率也比循环高得多,绝对是首选方案。

方法二:修正你的循环逻辑(符合你的初始思路)

如果你坚持想用循环的方式实现,那得把每一次转换的结果存起来,最后再统一赋值给新列:

import matplotlib.dates as mdates
import datetime

# 先创建一个空列表,用来存每一行转换后的数值
float_dates = []
for x in arsenalchelsea['Datum']:
    year = int(x[:4])
    month = int(x[5:7])
    day = int(x[8:10])
    hour = int(x[11:13])
    minute = int(x[14:16])
    sec = int(x[17:19])
    # 把当前行的转换结果添加到列表里
    float_dates.append(mdates.date2num(datetime.datetime(year, month, day, hour, minute, sec)))

# 把列表赋值给新列
arsenalchelsea['floatdate'] = float_dates

绘制折线图的小提示

有了数值型的floatdate列之后,你可以直接用它作为x轴绘制折线图,还能把x轴标签转回日期格式,方便阅读:

import matplotlib.pyplot as plt

# 绘制折线图,替换成你要展示的数值列
plt.plot(arsenalchelsea['floatdate'], arsenalchelsea['target_column'])
# 设置x轴日期显示格式
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M'))
# 旋转x轴标签,避免重叠
plt.xticks(rotation=45)
plt.show()

内容的提问来源于stack exchange,提问作者Jan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:41:23