折现面积图
项目说明
-
效果图
如何才能让横轴作为时间数据类型且时间按照顺序排序 -
引入包
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**9
将datetime
转换为 Unix 时间戳(以秒为单位)。
总结来说,虽然 astype
方法在数据类型转换中非常有用,但对于日期时间类型的转换,pd.to_datetime()
方法提供了更强大和灵活的功能。