gpt4 book ai didi

python - 自动 Pandas 日期标签不一致

转载 作者:太空宇宙 更新时间:2023-11-03 21:01:23 25 4
gpt4 key购买 nike

我想知道 pandas 如何准确地格式化 x 轴日期。我在一堆数据结果上使用相同的脚本,这些结果都具有相同的 pandas df 格式。但是,pandas 对每个 df 日期的格式不同。如何才能更加一致?

每个 df 都有一个像这样的 DatetimeIndexdtype='datetime64[ns]

>>> df.index
DatetimeIndex(['2014-10-02', '2014-10-03', '2014-10-04', '2014-10-05',
'2014-10-06', '2014-10-07', '2014-10-08', '2014-10-09',
'2014-10-10', '2014-10-11',
...
'2015-09-23', '2015-09-24', '2015-09-25', '2015-09-26',
'2015-09-27', '2015-09-28', '2015-09-29', '2015-09-30',
'2015-10-01', '2015-10-02'],
dtype='datetime64[ns]', name='Date', length=366, freq=None)

最终,我使用 df.plot() 进行绘图,其中 df 有两列。但绘图的轴有不同的样式,如下所示:

enter image description here

enter image description here

我希望所有绘图都具有第一个绘​​图的 x 轴样式。 pandas 应该自动执行此操作,因此我不想从 xticks 格式开始,因为我有很多数据要绘制。谁能解释一下该怎么做?谢谢!

编辑:

我正在阅读 2015 年的两个 csv 文件。第一个包含约 200 个站点的模型结果,第二个包含相同站点的仪表测量结果。后来,我又阅读了 2016 年的两个相同格式的 csv 文件。

import pandas as pd

df_model = pd.read_csv(path_model, sep=';', index_col=0, parse_dates=True)
df_gauge = pd.read_csv(path_gauge, sep=';', index_col=0, parse_dates=True)

df = pd.DataFrame(columns=['model', 'gauge'], index=df_model.index)

df['model'] = df_model['station_1'].copy()
df['gauge'] = df_gauge['station_1'].copy()

df.plot()

我每年都会这样做,所以 x 轴应该看起来相同,对吗?

最佳答案

除非您对 pandas 库进行修改,否则我认为这是不可能的。我环顾四周寻找可以在 Pandas 中设置的选项,但找不到。 Pandas 尝试使用实现的逻辑智能地选择轴刻度类型 here (我认为)。因此,在我看来,最好定义自己的函数来绘制图形,而不是覆盖刻度格式(尽管您不想这样做)。

互联网上有许多引用资料展示了如何做到这一点。我用过this一首由“Simone Centellegher”和 this stackoverflow 的答案是提出一个可能适合您的函数(在 python 3.7.1 中使用 matplotlib 3.0.2、pandas 0.23.4 进行测试):

import pandas as pd
import numpy as np
import matplotlib.dates as mdates
import matplotlib.pyplot as plt

## pass df with columns you want to plot
def my_plotter(df, xaxis, y_cols):
fig, ax = plt.subplots()
plt.plot(xaxis,df[y_cols])

ax.xaxis.set_minor_locator(mdates.MonthLocator())
ax.xaxis.set_major_locator(mdates.YearLocator())

ax.xaxis.set_minor_formatter(mdates.DateFormatter('%b'))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b\n%Y'))

# Remove overlapping major and minor ticks
majticklocs = ax.xaxis.get_majorticklocs()
minticklocs = ax.xaxis.get_minorticklocs()
minticks = ax.xaxis.get_minor_ticks()

for i in range(len(minticks)):
cur_mintickloc = minticklocs[i]
if cur_mintickloc in majticklocs:
minticks[i].set_visible(False)

return fig, ax


df = pd.DataFrame({'values':np.random.randint(0,1000,36)}, \
index=pd.date_range(start='2014-01-01', \
end='2016-12-31',freq='M'))

fig, ax = my_plotter(df, df.index, ["values"])

关于python - 自动 Pandas 日期标签不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55685211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com