将 pandas DataFrame 和 xaxis 绘制为时间戳会产生空图

Posted

技术标签:

【中文标题】将 pandas DataFrame 和 xaxis 绘制为时间戳会产生空图【英文标题】:Plotting of pandas DataFrame and xaxis as Timestamp produces empty plot 【发布时间】:2017-02-22 17:45:12 【问题描述】:

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

将其转换为时间戳
df['datetime'] = pd.to_datetime(df['Time [dd.mm.yyyy hh:mm:ss.ms]'], format="%d.%m.%Y %H:%M:%S.%f")

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

Resulting Picture form pyplot.plot

编辑: df.head() 给:

扫描时间 [dd.mm.yyyy hh:mm:ss.ms] 频率 [Hz] 电压 [V] 0 1.0 11.03.2014 10:13:04.270 50.0252 230.529 1 2.0 11.03.2014 10:13:06.254 49.9515 231.842 2 3.0 11.03.2014 10:13:08.254 49.9527 231.754 3 4.0 11.03.2014 10:13:10.254 49.9490 231.678 4 5.0 11.03.2014 10:13:12.254 49.9512 231.719

日期时间 0 2014-03-11 10:13:04.270 1 2014-03-11 10:13:06.254 2 2014-03-11 10:13:08.254 3 2014-03-11 10:13:10.254 4 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]”与“日期时间”。

【问题讨论】:

什么是 print (df.head())print (df.info) 在绘图之前? 【参考方案1】:

我认为您需要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()

【讨论】:

以上是关于将 pandas DataFrame 和 xaxis 绘制为时间戳会产生空图的主要内容,如果未能解决你的问题,请参考以下文章

如何将 sql 查询转换为 Pandas Dataframe 和 PySpark Dataframe

Pandas:将 DataFrame 转换为每个单元格的均值和标准差

将 Pandas Multiindexed DataFrame 与 Singleindexed Pandas DataFrame 合并

python pandas中如何将dataframe中的一列字符串类型转换为浮点类型?

Pandas dataframe数据写入文件和数据库

将多个csv文件导入pandas并合并到一个DataFrame中