簡體   English   中英

如何將具有 NaN 值的 Pandas DataFrame 列的 Unix 時間戳轉換為日期時間

[英]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.

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