簡體   English   中英

Pandas Python:KeyError 日期

[英]Pandas Python: KeyError Date

我導入到 python 中,它會自動創建一個日期時間對象。

但是我希望第一列是 Python 中的日期時間對象。 數據看起來像

Date,cost
41330.66667,100
41331.66667,101
41332.66667,102
41333.66667,103

當前代碼如下所示:

from datetime import datetime
import pandas as pd

data = pd.read_csv(r"F:\Sam\PJ\CSV2.csv")
data['Date'].apply(lambda x: datetime.strptime(x, '%d/%m/%Y'))

print(data)

這看起來像一個 excel 日期時間格式。 這稱為連續日期。 要從該序列日期轉換,您可以執行以下操作:

data['Date'].apply(lambda x: datetime.fromtimestamp( (x - 25569) *86400.0))

哪些輸出:

>>> data['Date'].apply(lambda x: datetime.fromtimestamp( (x - 25569) *86400.0))
0   2013-02-25 10:00:00.288
1   2013-02-26 10:00:00.288
2   2013-02-27 10:00:00.288
3   2013-02-28 10:00:00.288

要將其分配給data['Date']您只需執行以下操作:

data['Date'] = data['Date'].apply(lambda x: datetime.fromtimestamp( (x - 25569) *86400.0))

#df
                     Date  cost
0 2013-02-25 16:00:00.288   100
1 2013-02-26 16:00:00.288   101
2 2013-02-27 16:00:00.288   102
3 2013-02-28 16:00:00.288   103

不幸的是, read_csv不能處理以數字形式給出的日期列。 但好消息是Pandas確實有一個合適的函數來做到這一點。 read_csv調用后:

df.Date = pd.to_datetime(df.Date - 25569, unit='D').dt.round('ms')

我不明白,您的日期實際上是自30.12.1899 (加上一天的小數部分)以來的天數。 上面的“校正因子”( 25569 )工作正常。 對於Date == 0,它僅提供上述Excel 紀元日期的開始

建議四舍五入到毫秒(甚至可能是秒)。 否則,您將因一天中的小數部分的不准確四舍五入而產生奇怪的效果。 例如,對應於8 小時的0.33333333可以計算為07:59:59.999712

那么你在這里有兩個問題。

  1. 我們不知道 CSV 有哪些數據和列,但為了讓 Pandas 將日期作為列提取,它必須是該 csv 文件中的列。

  2. 應用到位不起作用。 您必須將 apply 的結果分配回日期,如data['Date'] = data['Date'].apply(lambda x: datetime.strptime(x, '%d/%m/%Y'))

暫無
暫無

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

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