TypeError: strptime() argument 1 must be str, not list
TypeError: strptime() argument 1 must be str, not list
我正在尝试绘制以下数据:
01/01/2012 01:00
01/01/2012 02:00
01/01/2012 03:00
01/01/2012 04:00
01/01/2012 05:00
01/01/2012 06:00
01/01/2012 07:00
01/01/2012 08:00
01/01/2012 09:00
01/01/2012 10:00
01/01/2012 11:00
01/01/2012 12:00
01/01/2012 13:00
01/01/2012 14:00
01/01/2012 15:00
01/01/2012 16:00
01/01/2012 17:00
01/01/2012 18:00
01/01/2012 19:00
01/01/2012 20:00
01/01/2012 21:00
01/01/2012 22:00
01/01/2012 23:00
02/01/2012 00:00
04/01/2012 23:00
................
05/01/2012 00:00
05/01/2012 01:00
................
针对 wind_speed 格式的数据:
[ 3.30049159 2.25226244 1.44078451 ... 12.8397099 9.75722427
7.98525797]
我的代码是:
T = T[1:]
print( datetime.datetime.strptime(T, "%m/%d/%Y %H:%M:%S").strftime("%Y%m%d %I:%M:%S") #pharsing the time
TIMESTAMP = [str (i) for i in T]
plt.plot_date(TIMESTAMP, wind_speed)
plt.show()
但是,我收到错误消息 "TypeError: strptime() argument 1 must be str",而不是列表。我是 Python 的新手,希望获得有关如何将列表转换为字符串的帮助或有关如何解决此问题的其他方法的帮助。谢谢!
这应该有所帮助。使用 map
和 lambda 将日期时间转换为您需要的格式。
演示:
import datetime
data = ['01/01/2012 01:00', '01/01/2012 02:00', '01/01/2012 03:00', '01/01/2012 04:00', '01/01/2012 05:00', '01/01/2012 06:00', '01/01/2012 07:00', '01/01/2012 08:00', '01/01/2012 09:00', '01/01/2012 10:00', '01/01/2012 11:00', '01/01/2012 12:00', '01/01/2012 13:00', '01/01/2012 14:00', '01/01/2012 15:00', '01/01/2012 16:00', '01/01/2012 17:00', '01/01/2012 18:00', '01/01/2012 19:00', '01/01/2012 20:00', '01/01/2012 21:00', '01/01/2012 22:00', '01/01/2012 23:00', '02/01/2012 00:00', '04/01/2012 23:00']
data = list(map(lambda x: datetime.datetime.strptime(x, "%m/%d/%Y %H:%M").strftime("%Y%m%d %I:%M:%S"), data))
print(data)
输出:
['20120101 01:00:00', '20120101 02:00:00', '20120101 03:00:00', '20120101 04:00:00', '20120101 05:00:00', '20120101 06:00:00', '20120101 07:00:00', '20120101 08:00:00', '20120101 09:00:00', '20120101 10:00:00', '20120101 11:00:00', '20120101 12:00:00', '20120101 01:00:00', '20120101 02:00:00', '20120101 03:00:00', '20120101 04:00:00', '20120101 05:00:00', '20120101 06:00:00', '20120101 07:00:00', '20120101 08:00:00', '20120101 09:00:00', '20120101 10:00:00', '20120101 11:00:00', '20120201 12:00:00', '20120401 11:00:00']
您的变量 T
显然是一个字符串列表,而不是字符串本身,因此您需要遍历 T 并将 T 中的项目传递给 strptime
。
for t in T:
datetime.datetime.strptime(t, "%m/%d/%Y %H:%M:%S").strftime("%Y%m%d %I:%M:%S")
正如其他答案所暗示的那样,您需要一种不同的方式,可能 map
。您也可以使用 pd.to_datetime()
并将整个列表传递给它。然后使用与 x 轴相同的方法和 y 轴的 wind_speed。
import pandas as pd
timestamp = pd.to_datetime(T[1:])
它将创建一个 DatetimeIndex,您可以根据需要再次对其进行格式化,例如:
timestamp = timestamp.strftime("%Y%m%d %I:%M:%S")
一行:
timestamp = pd.to_datetime(T[1:]).strftime("%Y%m%d %I:%M:%S")
在有两个时间戳列表和 wind_speed 之后,可以使用类似的东西:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(13,6))
ax.plot(timestamp, wind_speed)
plt.xticks(rotation=30)
plt.show()
我正在尝试绘制以下数据:
01/01/2012 01:00
01/01/2012 02:00
01/01/2012 03:00
01/01/2012 04:00
01/01/2012 05:00
01/01/2012 06:00
01/01/2012 07:00
01/01/2012 08:00
01/01/2012 09:00
01/01/2012 10:00
01/01/2012 11:00
01/01/2012 12:00
01/01/2012 13:00
01/01/2012 14:00
01/01/2012 15:00
01/01/2012 16:00
01/01/2012 17:00
01/01/2012 18:00
01/01/2012 19:00
01/01/2012 20:00
01/01/2012 21:00
01/01/2012 22:00
01/01/2012 23:00
02/01/2012 00:00
04/01/2012 23:00
................
05/01/2012 00:00
05/01/2012 01:00
................
针对 wind_speed 格式的数据:
[ 3.30049159 2.25226244 1.44078451 ... 12.8397099 9.75722427
7.98525797]
我的代码是:
T = T[1:]
print( datetime.datetime.strptime(T, "%m/%d/%Y %H:%M:%S").strftime("%Y%m%d %I:%M:%S") #pharsing the time
TIMESTAMP = [str (i) for i in T]
plt.plot_date(TIMESTAMP, wind_speed)
plt.show()
但是,我收到错误消息 "TypeError: strptime() argument 1 must be str",而不是列表。我是 Python 的新手,希望获得有关如何将列表转换为字符串的帮助或有关如何解决此问题的其他方法的帮助。谢谢!
这应该有所帮助。使用 map
和 lambda 将日期时间转换为您需要的格式。
演示:
import datetime
data = ['01/01/2012 01:00', '01/01/2012 02:00', '01/01/2012 03:00', '01/01/2012 04:00', '01/01/2012 05:00', '01/01/2012 06:00', '01/01/2012 07:00', '01/01/2012 08:00', '01/01/2012 09:00', '01/01/2012 10:00', '01/01/2012 11:00', '01/01/2012 12:00', '01/01/2012 13:00', '01/01/2012 14:00', '01/01/2012 15:00', '01/01/2012 16:00', '01/01/2012 17:00', '01/01/2012 18:00', '01/01/2012 19:00', '01/01/2012 20:00', '01/01/2012 21:00', '01/01/2012 22:00', '01/01/2012 23:00', '02/01/2012 00:00', '04/01/2012 23:00']
data = list(map(lambda x: datetime.datetime.strptime(x, "%m/%d/%Y %H:%M").strftime("%Y%m%d %I:%M:%S"), data))
print(data)
输出:
['20120101 01:00:00', '20120101 02:00:00', '20120101 03:00:00', '20120101 04:00:00', '20120101 05:00:00', '20120101 06:00:00', '20120101 07:00:00', '20120101 08:00:00', '20120101 09:00:00', '20120101 10:00:00', '20120101 11:00:00', '20120101 12:00:00', '20120101 01:00:00', '20120101 02:00:00', '20120101 03:00:00', '20120101 04:00:00', '20120101 05:00:00', '20120101 06:00:00', '20120101 07:00:00', '20120101 08:00:00', '20120101 09:00:00', '20120101 10:00:00', '20120101 11:00:00', '20120201 12:00:00', '20120401 11:00:00']
您的变量 T
显然是一个字符串列表,而不是字符串本身,因此您需要遍历 T 并将 T 中的项目传递给 strptime
。
for t in T:
datetime.datetime.strptime(t, "%m/%d/%Y %H:%M:%S").strftime("%Y%m%d %I:%M:%S")
正如其他答案所暗示的那样,您需要一种不同的方式,可能 map
。您也可以使用 pd.to_datetime()
并将整个列表传递给它。然后使用与 x 轴相同的方法和 y 轴的 wind_speed。
import pandas as pd
timestamp = pd.to_datetime(T[1:])
它将创建一个 DatetimeIndex,您可以根据需要再次对其进行格式化,例如:
timestamp = timestamp.strftime("%Y%m%d %I:%M:%S")
一行:
timestamp = pd.to_datetime(T[1:]).strftime("%Y%m%d %I:%M:%S")
在有两个时间戳列表和 wind_speed 之后,可以使用类似的东西:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(13,6))
ax.plot(timestamp, wind_speed)
plt.xticks(rotation=30)
plt.show()