我有一个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]”与“日期时间”。
1条答案
按热度按时间nqwrtyyt1#
我认为你需要
set_index
,然后设置两个轴的格式: