TypeError:strptime()参数1必须是字符串,而不是float

时间:2017-07-14 10:06:50

标签: python string datetime matplotlib strptime

早上好!

我有一系列相关日期的活动。事件日期作为一系列字符串值存储在我已加载到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

我将非常感激地收到任何有关我出错的建议。

1 个答案:

答案 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()

enter image description here