[英]How to convert a Unix Timestamp of a Pandas DataFrame Column with NaN Values to a Datetime
我有一個 pandas dataframe 和一個 Unix 時間戳列和一些NaN
值,如下所示:
>> df_to_datetime
0 1.571687e+09
1 1.586099e+09
2 NaN
3 1.589994e+09
4 1.593363e+09
5 1.585852e+09
6 1.580754e+09
7 1.582201e+09
8 1.576595e+09
9 1.586874e+09
Name: last_replied_at, dtype: float64
當我嘗試這樣做時:
for i in range (len(df_to_datetime)):
if not df_to_datetime[i]:
pass
else:
df_to_datetime[i] = [datetime.utcfromtimestamp(df_to_datetime[i]).astimezone(time_zone)]
print(df_to_datetime[i])
它返回這個:
11 pass
12 else:
---> 13 df_to_datetime[i] = [datetime.utcfromtimestamp(df_to_datetime[i]).astimezone(time_zone)]
14 print(df_to_datetime[i])
15
ValueError: Invalid value NaN (not a number)
我想將我的 Unix 時間戳列轉換為日期時間。 我之前嘗試過不使用if/else
,但在使用NaN
值時遇到了同樣的問題......
df_to_datetime[i] = [datetime.utcfromtimestamp(df_to_datetime[i]).astimezone(time_zone), errors='coerce']
不要在循環中使用 if/else 執行此操作,而是使用 setup 簽出apply 方法:
>> df_to_datetime = pd.Series(pd.date_range(start='1/1/2018', end='1/08/2018'),
name='last_replied_at').apply(pd.Timestamp.timestamp)
>> df_to_datetime.iloc[2] = np.nan
>> print(df_to_datetime)
0 1.514765e+09
1 1.514851e+09
2 NaN
3 1.515024e+09
4 1.515110e+09
5 1.515197e+09
6 1.515283e+09
7 1.515370e+09
Name: last_replied_at, dtype: float64
>> df_to_datetime.apply(pd.to_datetime, errors='coerce', utc=True, unit='s')
0 2018-01-01 00:00:00+00:00
1 2018-01-02 00:00:00+00:00
2 NaT
3 2018-01-04 00:00:00+00:00
4 2018-01-05 00:00:00+00:00
5 2018-01-06 00:00:00+00:00
6 2018-01-07 00:00:00+00:00
7 2018-01-08 00:00:00+00:00
Name: last_replied_at, dtype: datetime64[ns, UTC]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.