PyEcharts | 折线面积图实战--时间类型数据作为横轴标签时的转换

项目说明

  • 效果图
    在这里插入图片描述
    如何才能让横轴作为时间数据类型且时间按照顺序排序

  • 引入包

import pandas as pd
from pyecharts.charts import Line 
import pyecharts.options as opts

from pyecharts.globals import CurrentConfig,NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
df = pd.read_csv('3汽车之家-奥迪汽车数据.csv')
df.head()

在这里插入图片描述

print(df.shape)
df.info()

在这里插入图片描述
注意查看时间是Object类我们需要转换到datetime64[ns]这样才可以进行时间排序

提取需要的列生成新的DataFrame

y_data = df1.groupby('购车时间').count()['购车用户'] # 随机一列计算数量的和  即为本月的汽车销售数量
dff=y_data.to_frame()  # 转换成DataFrame  y_data 是series 
dff.reset_index(inplace=True)
dff.info()

在这里插入图片描述

dff

在这里插入图片描述

# 将时间那一列  由object转换为datatime[64]
dff['购车时间'] = pd.to_datetime(dff['购车时间'],format='%Y-%m',errors='coerce')
dff.info()

在这里插入图片描述

dff

在这里插入图片描述
注意查看时间这一列这时候多出了 时间 ,我们需要根据要求转为 年-月 的表示方式

#  时间类型才可以正确的进行时间排序
dff.sort_values(by='购车时间')

在这里插入图片描述

类型转换

dff['购车时间'] = dff['购车时间'].dt.strftime('%Y-%m')
dff

在这里插入图片描述

x_data = dff['购车时间'].values.tolist()
y_data = dff['购车用户'].values.tolist()

画图

l1 = (
    Line()
    .add_xaxis(x_data)
    .add_yaxis("", y_data,areastyle_opts=opts.AreaStyleOpts(opacity=0.5))
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title='1-奥迪用户购车时间分布',
            pos_top='1%',
            pos_left="center",
            title_textstyle_opts=opts.TextStyleOpts(color='#00838F',font_size=25),
        ),
    )
)
l1.load_javascript()
l1.render_notebook()

在这里插入图片描述

astype可以将Object转换为datetime64[ns]吗?

astype 方法在 pandas 中用于将数据类型转换为指定的类型。然而,对于将字符串转换为 datetime 类型,astype 方法本身并不直接支持。astype 方法主要用于基本的数据类型转换,如将字符串转换为整数(int)、浮点数(float)、布尔值(bool)等。

对于日期时间类型的转换,推荐使用 pd.to_datetime() 方法,因为它提供了更多的灵活性和功能,特别是处理日期时间格式和错误时。pd.to_datetime() 方法可以处理各种日期时间格式,并且可以通过 errors='coerce' 参数将无法解析的日期转换为 NaT

使用 pd.to_datetime()

import pandas as pd

# 示例数据
data = {
    '购车时间': ['2023-01-01', '2023-02-29', '2023-03-01', '2023-04-01', '2023-05-01', 'invalid-date']
}
dff = pd.DataFrame(data)

# 使用 pd.to_datetime() 转换为 datetime 类型
dff['购车时间'] = pd.to_datetime(dff['购车时间'], format='%Y-%m-%d', errors='coerce')

print(dff)

尝试使用 astype

尽管 astype 不能直接用于日期时间转换,但您可以先使用 pd.to_datetime() 转换为 datetime,然后再使用 astype 进行其他类型的转换。例如,如果您需要将日期时间转换为字符串或其他格式:

# 将 datetime 转换为字符串
dff['购车时间_str'] = dff['购车时间'].astype(str)

# 将 datetime 转换为 Unix 时间戳(以秒为单位)
dff['购车时间_unix'] = dff['购车时间'].astype('int64') // 10**9

print(dff)

输出结果

   购车时间 购车时间_str  购车时间_unix
0 2023-01-01  2023-01-01  1672531200
1        NaT        NaT  0
2 2023-03-01  2023-03-01  1677628800
3 2023-04-01  2023-04-01  1680345600
4 2023-05-01  2023-05-01  1682937600
5        NaT        NaT  0

在这个例子中:

  • astype(str)datetime 转换为字符串。
  • astype('int64') // 10**9datetime 转换为 Unix 时间戳(以秒为单位)。

总结来说,虽然 astype 方法在数据类型转换中非常有用,但对于日期时间类型的转换,pd.to_datetime() 方法提供了更强大和灵活的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胜天半月子

打不打商的无所谓,能帮到你就好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值