首页 > 解决方案 > 如何使用 map 和 lambda 函数将 pandas 中的列转换为日期时间?

问题描述

我有一列的时间像 9:3:15(没有前导 0)(9 点后 3 分 15 秒)。我想在 x 轴上绘制这个(没有日期,只是时间)。所以我尝试了以下代码:

def data_vis(dayN):
    plt.subplots_adjust(bottom=0.2)
    plt.xticks( rotation=25 )
    ax=plt.gca()
    #ax.xaxis_date()
    xfmt = md.DateFormatter('%H:%MM:%S')
    ax.xaxis.set_major_formatter(xfmt)
    plt.plot_date(md.date2num(dayN["Time Stamp"]),dayN["Temperature(deg C)"])
    plt.show()

我收到以下错误:

DateFormatter 发现 x=0 的值,是非法日期;这通常是因为您没有通知轴它正在绘制日期,例如使用 ax.xaxis_date()

启用后ax.xaxis_date(),我收到以下错误。

“str”对象没有属性“toordinal”

由于该列是“str”,我想使用

pd.to_datetime(day2["Time Stamp"], format = '%H:%M:%S)

但它会导致以下输出:

1900-01-01 09:51:33

现在我想尝试datetime.datetime.strptime对上述列使用 map 和/或 lambda 函数。

关于地图功能的实现和绘制数据的任何帮助都会非常有帮助。还datetime.strptime有助于解决问题吗?

谢谢,

标签: pandasdatetimematplotlibtime

解决方案


不知道这里出了什么问题;以下对我来说很好:

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.dates as md
# create a dummy df...
dayN = pd.DataFrame({"Temperature(deg C)": np.random.rand(10)+20,
                     "Time Stamp": ['9:3:15','9:3:16','9:3:17','9:3:18','9:3:19',
                                    '9:3:20','9:3:21','9:3:22','9:3:23','9:3:24']})
# format to datetime, don't care about the date:
dayN["Time Stamp"] = pd.to_datetime(dayN["Time Stamp"], format='%H:%M:%S')

plt.subplots_adjust(bottom=0.2)
plt.xticks(rotation=25)
ax = plt.gca()
xfmt = md.DateFormatter('%H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.plot_date(md.date2num(dayN["Time Stamp"]), dayN["Temperature(deg C)"])
plt.show()

在此处输入图像描述


推荐阅读