[英]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.