将pandas、DataFrame和xaxis绘制为时间戳将生成空图

dy1byipe  于 2023-05-27  发布在  其他
关注(0)|答案(1)|浏览(128)

我有一个pandas.DataFrame(df),它由一些值和一个datetime组成,datetime最初是一个字符串,但我使用

df['datetime'] = pd.to_datetime(df['Time [dd.mm.yyyy hh:mm:ss.ms]'], format="%d.%m.%Y %H:%M:%S.%f")

它看起来是有效的,我可以访问新列的元素属性,比如obj.day等,所以结果列包含一个Timestamp。当我尝试使用pyplot.plot(df['datetime'],df['value_name'])df.plot(x='datetime',y='value_name')绘制此图时,下图是结果。我尝试使用obj.to_pydatetime()转换时间戳,但这并没有改变任何东西。dataframe本身由一些来自csv的数据填充。让我困惑的是,对于某些CSV,它可以工作,而对于其他CSV则不行。我很确定转换到时间戳是成功的,但我可能错了。我的时间窗口应该是2015-2016年,而不是1981-1700年。如果我尝试从DataFrame中定位最小和最大时间戳,我将分别获得2015年和2016年的正确时间戳。

data = {'Sweep': [1.0, 2.0, 3.0, 4.0, 5.0],
        'Time [dd.mm.yyyy hh:mm:ss.ms]': ['11.03.2014 10:13:04.270', '11.03.2014 10:13:06.254', '11.03.2014 10:13:08.254', '11.03.2014 10:13:10.254', '11.03.2014 10:13:12.254'],
        'Frequency [Hz]': [50.0252, 49.9515, 49.9527, 49.949, 49.9512],
        'Voltage [V]': [230.529, 231.842, 231.754, 231.678, 231.719]}

df = pd.DataFrame(data)

df['datetime'] = pd.to_datetime(df['Time [dd.mm.yyyy hh:mm:ss.ms]'], format="%d.%m.%Y %H:%M:%S.%f")

   Sweep Time [dd.mm.yyyy hh:mm:ss.ms]  Frequency [Hz]  Voltage [V]                datetime
0    1.0       11.03.2014 10:13:04.270         50.0252      230.529 2014-03-11 10:13:04.270
1    2.0       11.03.2014 10:13:06.254         49.9515      231.842 2014-03-11 10:13:06.254
2    3.0       11.03.2014 10:13:08.254         49.9527      231.754 2014-03-11 10:13:08.254
3    4.0       11.03.2014 10:13:10.254         49.9490      231.678 2014-03-11 10:13:10.254
4    5.0       11.03.2014 10:13:12.254         49.9512      231.719 2014-03-11 10:13:12.254

并且df.info()给出:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 33270741 entries, 0 to 9140687
Data columns (total 5 columns):
Sweep                            float64
Time [dd.mm.yyyy hh:mm:ss.ms]    object
Frequency [Hz]                   float64
Voltage [V]                      float64
datetime                         datetime64[ns]
dtypes: datetime64[ns](1), float64(3), object(1)
memory usage: 1.5+ GB

我正在尝试绘制“频率[Hz]”与“日期时间”。

nqwrtyyt

nqwrtyyt1#

我认为你需要set_index,然后设置两个轴的格式:

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

df['datetime'] = pd.to_datetime(df['Time [dd.mm.yyyy hh:mm:ss.ms]'],
                                   format="%d.%m.%Y %H:%M:%S.%f")

print (df)

df.set_index('datetime', inplace=True)

ax = df['Frequency [Hz]'].plot()

ticklabels = df.index.strftime('%Y-%m-%d')
ax.xaxis.set_major_formatter(ticker.FixedFormatter(ticklabels))
ax.yaxis.set_major_formatter(ticker.FormatStrFormatter('%.2f'))
plt.show()

相关问题