繁体   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