簡體   English   中英

類型錯誤:strptime() 參數 1 必須是 str,而不是句點

[英]TypeError: strptime() argument 1 must be str, not Period

我有這個數據框。

import pandas as pd
from datetime import datetime
df = pd.DataFrame({'id': [11,22,33,44,55], 
                   'name': ['A','B','C','D','E'], 
                   'timestamp': [1407617838,965150022,1158531592,1500701864,965149631]})
df
   id name timestamp
0  11    A      2014
1  22    B      2000
2  33    C      2006
3  44    D      2017
4  55    E      2000
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
df['timestamp'] = df['timestamp'].dt.to_period('Y')
y1 = df['timestamp'].iloc[0]
y2 = df['timestamp'].iloc[1]
d1 = datetime.strptime(y1, "%Y")
d2 = datetime.strptime(y2, "%Y")
diff = abs((d2 - d1).days)
print(diff)

我已將時間戳轉換為實際日期並獲取年份。 我想要兩個時間戳的前兩行之間的差異。 例如 (abs (2014-2000) = 4)

如果您通過timeseriesdt 訪問器獲取年份,則會得到整數(而不是“Period”對象):

df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
df['timestamp'] = df['timestamp'].dt.year
y1 = df['timestamp'].iloc[0]
y2 = df['timestamp'].iloc[1]
# d1 = datetime.strptime(y1, "%Y") <- No need to recast to datetime!
# d2 = datetime.strptime(y2, "%Y")
diff = abs((y2 - y1))
print(diff)
>>> 14

如您所見,我評論了這兩行是您試圖將年份重新轉換為datetime對象。 這有什么原因嗎? 根據您的問題,我假設您想要年數的差異。 如果您想要時間戳之間的確切天數,則應該這樣做:(無需轉換和重新轉換):

df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
y1 = df['timestamp'].iloc[0]
y2 = df['timestamp'].iloc[1]
diff = abs((y2 - y1).days)
print(diff)
>>> 5122

暫無
暫無

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

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