早上好!
我有一系列相关日期的活动。事件日期作为一系列字符串值存储在我已加载到Python中的数据框的列中。数据框包含具有值的其他列。我想转换列" event"中的值。进入datetime对象,将它们存储在列表中,然后使用matplotlib绘制该列表以创建时间序列。
我的数据框如下所示:
date value_1 event other_event
37 07/02/2015 265.09 07/02/2015 NaN
38 08/02/2015 278.59 08/02/2015 NaN
156 06/06/2015 146.07 06/06/2015 NaN
180 30/06/2015 133.56 30/06/2015 NaN
243 01/09/2015 280.27 01/09/2015 01/09/2015
Python告诉我列数据是Name: event, dtype: object
,我假设它意味着它包含字符串值。我的代码中也有df.event.apply(str)
行,我认为我会将事件列中的值转换为字符串值。
然后我有了这段代码:
FMT = '%d/%m/%Y'
event_list = []
for i in range(0, len(event)):
event_list.append(datetime.datetime.strptime(event[i], FMT))
但是,此行会返回错误:
Traceback (most recent call last):
File "<ipython-input-39-e778a465e858>", line 2, in <module>
event_list.append(datetime.datetime.strptime(event[i], FMT))
TypeError: strptime() argument 1 must be string, not float
我将非常感激地收到任何有关我出错的建议。
答案 0 :(得分:3)
要使用matplotlib绘制相关数据框,您可以先使用pandas.to_datetime
将相关列转换为日期时间。
u = u"""i date value_1 event other_event
37 07/02/2015 265.09 07/02/2015 NaN
38 08/02/2015 278.59 08/02/2015 NaN
156 06/06/2015 146.07 06/06/2015 NaN
180 30/06/2015 133.56 30/06/2015 NaN
243 01/09/2015 280.27 01/09/2015 01/09/2015"""
import io
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv(io.StringIO(u), delim_whitespace=True)
df["event"] = pd.to_datetime(df["event"], format="%d/%m/%Y")
plt.plot(df["event"], df["value_1"])
plt.gcf().autofmt_xdate()
plt.show()