[英]Converting Items from Pandas Series to Date Time
我有一個Pandas系列(“ timeSeries”),其中包含一天中的某個時間。 一些項目為空白,一些為實際時間(08:00; 13:00),一些為時間指示(早晨,下午)。
由於我所在的時間是紐約,所以我想將時間格式的項目轉換為倫敦時間。 當我還添加了timedelta(hours=5)
時,無法使用pd.to_datetime(timeSeries, error='ignore')
timedelta(hours=5)
。 所以我試圖添加一個if條件,但是它不起作用。
樣本初始DataFrame:
dfNY = pd.DataFrame({'TimeSeries': [13:00, nan, 06:00, 'Morning', 'Afternoon', nan, nan, 01:30])
所需結果:
dfLondon = pd.DataFrame({'TimeSeries': [18:00, nan, 11:00, 'Morning', 'Afternoon', nan, nan, 06:30])
對我的代碼的任何幫助或簡化都將非常有用。
london = dt.datetime.now(timezone("America/New_York"))
newYork = dt.datetime.now(timezone("Europe/London"))
timeDiff = (london - dt.timedelta(hours = newYork.hour)).hour
for dayTime in timeSeries:
if dayTime == "%%:%%":
print(dayTime)
dayTime = pd.to_datetime(dayTime) + dt.timedelta(hours=timeDiff)
return timeSeries
更新:在下面的注釋中使用pytz方法產生的時區偏離我的5分鍾。 我們該如何解決?
使用.dt
訪問器 ,您可以將時區設置為您的值,然后使用tz.localize
和tz_convert
將其轉換為另一個時區。
import pandas as pd
import numpy as np
pd.options.display.max_columns = 5
df = pd.DataFrame({'TimeSeries': ["13:00", np.nan, "06:00", 'Morning', 'Afternoon', np.nan, np.nan, "01:30"]})
# Convert your data to datetime, errors appears, but we do not care about them.
# We also explicitly note that the datetime is a specific timezone.
df['TimeSeries_TZ'] = pd.to_datetime(df['TimeSeries'], errors='coerce', format='%H:%M')\
.dt.tz_localize('America/New_York')
print(df['TimeSeries_TZ'])
# 0 1900-01-01 13:00:00-04:56
# 1 NaT
# 2 1900-01-01 06:00:00-04:56
# 3 NaT
# 4 NaT
# 5 NaT
# 6 NaT
# 7 1900-01-01 01:30:00-04:56
# Then, we can use the datetime accessor to convert the timezone.
df['Converted_time'] = df['TimeSeries_TZ'].dt.tz_convert('Europe/London').dt.strftime('%H:%M')
print(df['Converted_time'])
# 0 17:55
# 1 NaT
# 2 10:55
# 3 NaT
# 4 NaT
# 5 NaT
# 6 NaT
# 7 06:25
# If you want to convert the original result that CAN be converted, while keeping the values that
# raised errors, you can copy the original data, and change the data that is not equal to the value
# that means an error was raised, e.g : NaT (not a timestamp).
df['TimeSeries_result'] = df['TimeSeries'].copy()
df['TimeSeries_result'] = df['TimeSeries'].where(~df['Converted_time'].ne('NaT'), df['Converted_time'])
print(df[['TimeSeries', 'TimeSeries_result']])
# TimeSeries TimeSeries_result
# 0 13:00 17:55
# 1 NaN NaN
# 2 06:00 10:55
# 3 Morning Morning
# 4 Afternoon Afternoon
# 5 NaN NaN
# 6 NaN NaN
# 7 01:30 06:256 06:25 06:25
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.