[英]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'])
要將index
從int
轉換為date time
,請執行以下操作:
data.index = pd.to_datetime(data.index, format='%Y%m')
可能還有比這更簡單的解決方案,首先使用apply
我將你的Year-Weekid
轉換為Year-month-day
格式,然后只是簡單地使用set_index
將date
作為索引列。
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.