簡體   English   中英

如何為 pandas dataframe 中的每周列設置日期時間類型索引

[英]how to set datetime type index for weekly column in pandas dataframe

我有如下數據:

date    product price   amount
201901  A   10  20
201902  A   10  20
201903  A   20  30
201904  C   40  50

此數據保存在 test.txt 文件中。 日期列以每周列的形式給出,作為年份和 weekid 的串聯。 我正在嘗試使用給定代碼將日期列設置為索引:

import pandas as pd
import numpy as np
data=pd.read_csv("test.txt", sep="\t", parse_dates=['date'])

但它給出了一個錯誤。 如何將日期列設置為日期時間類型的索引?

使用index_col參數設置index

data=pd.read_csv("test.txt", sep="\t", index_col=[0])

編輯:使用列名作為索引:

data=pd.read_csv("test.txt", sep="\t", index_col=['date'])

要將indexint轉換為date time ,請執行以下操作:

data.index = pd.to_datetime(data.index, format='%Y%m')

可能還有比這更簡單的解決方案,首先使用apply我將你的Year-Weekid轉換為Year-month-day格式,然后只是簡單地使用set_indexdate作為索引列。

import pandas as pd

data ={
    'date' : [201901,201902,201903,201904,201905],
    'product' : ['A','A','A','C','C'],
    'price' : [10,10,10,20,20],
    'amount' : [20,20,30,50,60]
}


df = pd.DataFrame(data)

# str(x)+'1' converts to Year-WeekId-Weekday, so 1 represents `Monday` so 2019020 
# means 2019 Week2 Monday.
# If you want you can try with other formats too

df['date'] = df['date'].apply(lambda x: pd.to_datetime(str(x)+'1',format='%Y%W%w'))
df.set_index(['date'],inplace=True)
df

編輯:

要以Year-WeekID格式查看日期時間,您可以按如下方式設置 dataframe 的樣式,但是如果將date設置為索引列,則以下代碼將無法工作。 還要記住以下代碼只是應用了一些樣式,因此僅用於顯示目的,在內部它將保留為日期時間 object。

df['date'] = df['date'].apply(lambda x: pd.to_datetime(str(x)+'1',format='%Y%W%w'))
style_format = {'date':'{:%Y%W}'}
df.style.format(style_format)

在此處輸入圖像描述

您還可以使用date_parser參數:

import pandas as pd
from io import StringIO
from datetime import datetime

dateparse = lambda x: datetime.strptime(x, '%Y%m')

inputtxt = StringIO("""date    product price   amount
201901  A   10  20
201902  A   10  20
201903  A   20  30
201904  C   40  50""")

df = pd.read_csv(inputtxt, sep='\s+', parse_dates=['date'], date_parser=dateparse)
df.info()

Output:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 4 columns):
 #   Column   Non-Null Count  Dtype         
---  ------   --------------  -----         
 0   date     4 non-null      datetime64[ns]
 1   product  4 non-null      object        
 2   price    4 non-null      int64         
 3   amount   4 non-null      int64         
dtypes: datetime64[ns](1), int64(2), object(1)
memory usage: 256.0+ bytes

暫無
暫無

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

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