我有一個列名 Date_and_Time 在 csv 中有數千個資料,如下所示:
輸入:
Date_and_Time
2021-06-02T13:00:00.000 05:30
2021-06-02T15:00:00.000 05:30
2021-06-02T19:00:00.000 05:30
2021-06-02T21:00:00.000 05:30
2021-06-02T22:00:00.000 05:30
我想在 csv 檔案中更改如下所示的 6 列。通過添加 5.30 小時來更改“新時間”。正因為如此,“新日期”也隨之改變。還有一個“時間間隔”列。請在 Python 中提供幫助。謝謝。
輸出:
Date and Time Old Date Old Time New Date New Time Time Gap
2021-06-02T13:00:00.000 05:30 2021-06-02 13:00:00 2021-06-02 18:30:00 NA
2021-06-02T15:00:00.000 05:30 2021-06-02 15:00:00 2021-06-02 20:30:00 2
2021-06-02T19:00:00.000 05:30 2021-06-02 19:00:00 2021-06-03 0:30:00 4
2021-06-02T21:00:00.000 05:30 2021-06-02 21:00:00 2021-06-03 2:30:00 2
2021-06-02T22:00:00.000 05:30 2021-06-02 22:00:00 2021-06-03 3:30:00 1
uj5u.com熱心網友回復:
如果您嘗試從輸入列創建輸出格式,則以下方法可能會有所幫助:
import pandas as pd
add_time = pd.Timedelta(hours=5, minutes=30)
df = pd.read_csv('input.csv')
df['OldDateTime'] = pd.to_datetime(df['Date_and_Time'])
df['Old Date'] = df['OldDateTime'].dt.date
df['Old Time'] = df['OldDateTime'].dt.time
df['New Date'] = (df['OldDateTime'] add_time).dt.date
df['New Time'] = (df['OldDateTime'] add_time).dt.time
df['Time Gap'] = (df['OldDateTime'] - df['OldDateTime'].shift(1)).dt.total_seconds() / 3600
del df['OldDateTime']
print(df)
給你:
Date_and_Time Old Date Old Time New Date New Time Time Gap
0 2021-06-02T13:00:00.000 05:30 2021-06-02 13:00:00 2021-06-02 18:30:00 NaN
1 2021-06-02T15:00:00.000 05:30 2021-06-02 15:00:00 2021-06-02 20:30:00 2.0
2 2021-06-02T19:00:00.000 05:30 2021-06-02 19:00:00 2021-06-03 00:30:00 4.0
3 2021-06-02T21:00:00.000 05:30 2021-06-02 21:00:00 2021-06-03 02:30:00 2.0
4 2021-06-02T22:00:00.000 05:30 2021-06-02 22:00:00 2021-06-03 03:30:00 1.0
這通過獲取原始列并首先將其轉換為適當的datetime物件來作業。然后可以使用它來執行計算,例如僅提取日期或時間,或添加固定時間。一旦計算完成,這個額外的列就會被洗掉(但可以保留)。
注意:Time Gap可以使用相鄰OldDateTime條目中的差異來計算,因為這將始終與add_time將兩者相加來計算的相同。即差異不會改變。
如果您想要Time Gap以秒為單位,請洗掉/ 3600將總秒數轉換為小時數(根據您的示例)。
uj5u.com熱心網友回復:
您似乎希望將已包含正確時區指示的 ISO 格式日期轉換為 IST 中的等效掛鐘時間。
首先要做的是datetime從字串中獲取一個:
>>> a = datetime.datetime.fromisoformat("2021-06-02T13:00:00.000 05:30")
>>> a
datetime.datetime(2021, 6, 2, 13, 0, tzinfo=datetime.timezone(datetime.timedelta(seconds=19800)))
現在您想要將 UTC 偏移量 (5h30m) 添加到已經正確的 IST 時間以提供 IST 掛鐘時間,也就是說,您想要將 UTC 偏移量移出時區并移入時間。這是一件很奇怪的事情,但你可以做
>>> new_time = a datetime.timedelta(hours=5, minutes=30)
或等效地
>>> new_time = a a.utcoffset()
或者會給你
>>> new_time
datetime.datetime(2021, 6, 2, 18, 30, tzinfo=datetime.timezone(datetime.timedelta(seconds=19800)))
但是現在您對 UTC 偏移量進行了雙重計算,因此您需要將 UTC 偏移量移出時區:
>>> new_time = new_time.replace(tzinfo=None)
>>> new_time
datetime.datetime(2021, 6, 2, 18, 30)
您可以將其格式化為字串,以獲得您期望的掛鐘時間:
>>> new_time.strftime("%Y-%m-%d %H:%M:%S")
'2021-06-02 18:30:00'
盡管我確實認為將時間存盤在.csv沒有時區的掛鐘時間中,而不是像現在這樣,是因為您希望將日期的螢屏表示強制轉換為基礎資料。這與將年份存盤為兩位數一樣明智,因為這就是您想要顯示它們的方式。今天的許多程式員還太年輕,不記得這造成了多大的麻煩。
通常的方法是將檔案級別的資料存盤為獨立于語言環境和約定的資料,并在輸入和輸出時對其進行轉換。
除了它存在之外,您的問題沒有解釋時間間隔應該是什么意思。所以我沒有試圖回答這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/489597.html
上一篇:Kotlin如何使用CSV函式
