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