簡體   English   中英

TypeError:strptime()參數1必須是str,而不是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()參數1必須為str”,而不是列表。 我是Python的新手,希望能對如何將列表轉換為字符串或如何解決此問題的其他方法有所幫助。 謝謝!

正如其他答案所建議的那樣,您需要使用其他方法,可能是map 您也可以使用pd.to_datetime()並將其傳遞給整個列表。 然后使用與x軸相同的值,將wind_speed用作y軸。

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列表之后,use可以使用類似以下內容:

import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(13,6))
ax.plot(timestamp, wind_speed)
plt.xticks(rotation=30)
plt.show()

這應該有所幫助。 使用帶lambda的map將日期時間轉換為所需的格式。

演示:

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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM