簡體   English   中英

使用 python 中的 DASK 將時間戳轉換為正確的格式

[英]converting Timestamp into proper format with DASK in python

以下代碼將 dataframe 的任何類型的時間戳轉換為給定的格式。

pd.to_datetime(df_pd["timestamp"]).dt.strftime('%Y-%m-%d %X')

我怎樣才能用“DASK”做到這一點? 我使用了下面的代碼,但它不起作用。

(df 是 dask 數據框)

a=dd.to_datetime(df["time:timestamp"],format='%Y-%m-%d %X')
a.compute()

Error-: ValueError: unconverted data remains: .304000+00:00

這就是時間戳的樣子—— "2016-01-01 09:51:15.304000+00:00" (可以是任何格式)

預期 output -: "2016-01-01 09:51:15"

我發現Converting a Dask column into new Dask column of type datetime ,但它不工作

Pandas 的示例適用於任何格式-:


import pandas as pd
  

data = ['2016-01-01 09:51:15.304000+00:00','2016-01-01 09:51:15.304000+00:00','2016-01-01 09:51:15.304000+00:00','2016-01-01 09:51:15.304000+00:00']
data1 = ['2016-01-01 09:51:15','2016-01-01 09:51:15','2016-01-01 09:51:15','2016-01-01 09:51:15','2016-01-01 09:51:15']
data2 = ['2016-01-01','2016-01-01','2016-01-01','2016-01-01','2016-01-01']
  

df1 = pd.DataFrame(data2, columns=['t'])

df1['t']=pd.to_datetime(df1["t"]).dt.strftime('%Y-%m-%d %X')

誰能告訴我,如何用“Dask”做同樣的事情

這是我的解決方案

可以使用以下代碼完成: dd.to_datetime(df["t"].compute()).dt.strftime('%Y-%m-%d %X')

但現在的問題是我無法像使用 pandas 那樣將這個轉換存儲在現有的 dataframe 中。

如果我這樣做df["t"]=dd.to_datetime(df["t"].compute()).dt.strftime('%Y-%m-%d %X') ,它會引發錯誤。

ValueError: Not all divisions are known, can't align partitions. Please use `set_index` to set the index.

這個ValueError: Not all divisions are known, can't align partitions error on dask dataframe does not workk

因為您已經擁有幾乎正確格式的字符串,可能只是使用字符串:

df_pd['timestamp'] = df_pd['timestamp'].str.replace(r'\..*', '', regex=True)

或者,如果您需要使用to_datetime

pd.to_datetime(df_pd["timestamp"]).dt.strftime('%Y-%m-%d %X')

或者:

pd.to_datetime(df_pd["timestamp"],format='%Y-%m-%d %H:%M:%S.%f%z').dt.strftime('%Y-%m-%d %X')

您可以截斷日期時間:

# Solution 1
>>> dd.to_datetime(df['time:timestamp'].str[:19]).compute()
0   2016-01-01 09:51:15
dtype: datetime64[ns]


# Solution 2
>>> dd.to_datetime(df['time:timestamp'].str.split('.').str[0]).compute()
0   2016-01-01 09:51:15
dtype: datetime64[ns]


# Solution 3 (@mozway)
>>> dd.to_datetime(df['time:timestamp'].str.replace('\..*', '', regex=True)).compute()
0   2016-01-01 09:51:15
dtype: datetime64[ns]

我是這樣做的

df["time:timestamp"]=dd.to_datetime(df["time:timestamp"]).dt.strftime('%Y-%m-%d %X')

df.compute()```

暫無
暫無

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

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