# 读取crime数据集,行索引设为REPORTED_DATE,并排序
crime_sort = pd.read_hdf('data/crime.h5', 'crime') \
.set_index('REPORTED_DATE') \
.sort_index() #用于对索引列排序
'''
解释:
存储文件
day_close.to_hdf('data/crime.h5', key='crime')
再次读取的时候, 需要指定键的名字
new_close = pd.read_hdf("data/crime.h5", key='crime')
'''
# 输出DatetimeIndex的可用属性和方法
common_attrs = set(dir(crime_sort.index)) & set(dir(pd.Timestamp))
#如果 dir() 没有参数,则返回当前作用域中的名称列表;否则,返回给定 object 的一个已排序的属性名称列表。
#如果对象提供了 __dir__() 方法,则它将会被使用;否则,使用默认的 dir() 逻辑,并返回。
#使用 dir() 可以查看指定模块中定义的名称,它返回的是一个已排序的字符串列表:
print([attr for attr in common_attrs if attr[0] != '_'])
'''
['freqstr', 'tz', 'is_month_end', 'freq', 'day', 'strftime', 'is_year_start', 'normalize',
'weekday', 'week', 'round', 'year', 'month_name', 'ceil', 'min', 'dayofyear', 'timetz',
'date', 'weekofyear', 'tz_convert', 'days_in_month', 'dayofweek', 'floor', 'month',
'second', 'to_julian_date', 'is_quarter_start', 'to_period', 'microsecond', 'daysinmonth',
'is_leap_year', 'is_month_start', 'tz_localize', 'tzinfo', 'nanosecond', 'to_pydatetime',
'to_numpy', 'day_name', 'is_year_end', 'max', 'quarter', 'is_quarter_end', 'time',
'resolution', 'hour', 'minute']
'''
# 用index找到星期名
crime_sort.index.day_name().value_counts()
'''
Monday 70024
Friday 69621
Wednesday 69538
Thursday 69287
Tuesday 68394
Saturday 58834
Sunday 55213
Name: REPORTED_DATE, dtype: int64
'''
# groupby可以接收函数作为参数。
# 用函数将行索引变为周几,然后按照犯罪和交通事故统计
crime_sort.groupby(lambda x: x.day_name())['IS_CRIME', 'IS_TRAFFIC'].sum()
|
IS_CRIME |
IS_TRAFFIC |
Friday |
48833 |
20814 |
Monday |
52158 |
17895 |
Saturday |
43363 |
15516 |
Sunday |
42315 |
12968 |
Thursday |
49470 |
19845 |
Tuesday |
49658 |
18755 |
Wednesday |
50054 |
19508 |