Use pandas for year, year-month, year-month-day, data grouping

Use pandas for year, year-month, year-month-day, data grouping

#导入colab文件导入工具
from google.colab import files
uploaded = files.upload()
#导入pandas库
import pandas as pd
#读取文件数据,并将数据中日期列转换为日期格式
data=pd.read_csv('hair_dryer.tsv',sep='\t')
data['review_date']=pd.to_datetime(data['review_date'])
#定义日期提取函数,这里将日期变为了连续数字(如202001),也可另写定义为如2020/01之类的格式
def year_month(x):
  a=x.year
  b=x.month
  return a*100+b
#apply对data4['review_day']中的每一行数据进行year_month函数操作(提取年月),groupby函数再对apply调用变形后的数据,进行相同数据所在行的sum操作
data5=data4.groupby(data4['review_day'].apply(year_month)).sum()
#运行效果:
 sale_count
review_day            
200203               1
200204               1
200205               0
200206               0
200207               1
...                ...
201504             334
201505             321
201506             337
201507             365
201508             378

[162 rows x 1 columns]
#单独的年分组和月分组或日分组叫简单,使用匿名函数lambda x:关于x的函数,直接使用x.year,x.month,x.date
data7=data4.groupby(data4['review_day'].apply(lambda x:x.year)).sum()
#日分组也可如下方式,并对相同日期进行count操作(及计算每个日期有多少个重复)
data3=data3['star_rating'].groupby(data3['review_date']).count()
2002-03-02     1
2002-04-20     1
2002-07-13     1
2002-08-13     1
2002-08-21     1
              ..
2015-08-27    10
2015-08-28     8
2015-08-29    10
2015-08-30     8
2015-08-31    10
#顺便说说非连续数据填充补零,原未填充数据如上面的打印数据
pdates=pd.date_range(start='2002-03-02',end='2015-08-31')#首先设置补充日期的范围
data3_new=data3.reindex(pdates,fill_value=0)#将日期范围pdates作为数据索引,对索引无对应数据的行进行补零
data3_new.head()
#打印输出是这样
2002-03-02    1
2002-03-03    0
2002-03-04    0
2002-03-05    0
2002-03-06    0
Freq: D, Name: star_rating, dtype: int64

Guess you like

Origin blog.csdn.net/ohhardtoname/article/details/104835788