Chapter 1:创建与探索DF、排序、子集化:Python数据分析——Pandas基础入门+代码(一)
Chapter 2:聚合函数,groupby,统计分析:Python数据分析——Pandas基础入门+代码(二)
Chapter 3:索引和切片:Python数据分析——Pandas基础入门+代码(三)
Chapter 4:可视化与读写csv文件:Python数据分析——Pandas基础入门+代码(四)
Chapter 5:数据透视表:Python数据分析——Pandas基础入门+代码之数据透视表
文章目录
- 系列文章目录
- 前言
- 时间数据的提取
- 数据透视表 .pivot_table()
- Calculating on a pivot table 数据透视表——计算
- Reference
前言
这一篇主要讲的是:如何用pandas做数据透视表 以及 时间数据上的小处理
一些非常基础的内容,把官方的文档进行了一些解释
时间数据的提取
这里希望我们做一个关于城市温度的年份数据透视表,也就是要先处理一下时间数据。
在dataframe里面,时间数据的处理是用这么一条代码
dataframe["column"].dt.[component]
这个component可以用year, month, day来代替
# 只取年份
dataframe["column"].dt.year
# 只取月份
dataframe["column"].dt.month
# 只取日期
dataframe["column"].dt.day
比如原数据是这样的
In[1]: temperatures["date"]
Out[1]:
0 2000-01-01
1 2000-02-01
2 2000-03-01
3 2000-04-01
4 2000-05-01
...
16495 2013-05-01
16496 2013-06-01
16497 2013-07-01
16498 2013-08-01
16499 2013-09-01
Name: date, Length: 16500, dtype: datetime64[ns]
然后我们只取年份
In [1]: temperatures["date"].dt.year
Out[1]:
0 2000
1 2000
2 2000
3 2000
4 2000
...
16495 2013
16496 2013
16497 2013
16498 2013
16499 2013
Name: date, Length: 16500, dtype: int64
数据透视表 .pivot_table()
下面整体说下数据透视表DataFrame.pivot_table,以下是官方文档给的
DataFrame.pivot_table(values=None, index=None, columns=None, aggfunc='mean',
fill_value=None, margins=False, dropna=True,
margins_name='All', observed=False, sort=True)
Parameters | Description |
---|---|
values | 要聚合的值,也就是我们要拿来“透视”的值 |
index | column、Grouper、array或一个list。 也就是我们的索引列,相当于rows |
columns | column、Grouper、数组或前一个列表。 如果传递的是数组,则它必须与数据的长度相同。 一般来说,输入的都是列标签 |
aggfunc | 聚合函数,默认为mean |
fill_value | 是否填充缺失值,默认不填充,填的话可以自己定填什么 |
margins | 默认为 False,对添加的所有行/列进行一个总计。 |
dropna | 不要包括其条目全部为 NaN 的列。 |
margins_namestr | 默认“All”,当margins为 True 时将包含总计的行/列的名称。 |
observed | 认为 False,这仅适用于任何分组是分类的。 如果为真:仅显示分类分组的观察值。 如果为假:显示分类分组的所有值。 |
sort | 是否排序 |
给个例子就什么都懂了,相互对应一下。
# Example
# Pivot avg_temp_c by country and city vs year
temp_by_country_city_vs_year = data.pivot_table('avg_temp_c', index = ['country', 'city'], columns = 'year')
# 输出数据集预览
Out[1]:
year 2000 2001 2002 2003 2004 ... 2009 2010 2011 2012 2013
country city ...
Afghanistan Kabul 15.823 15.848 15.715 15.133 16.128 ... 15.093 15.676 15.812 14.510 16.206
Angola Luanda 24.410 24.427 24.791 24.867 24.216 ... 24.325 24.440 24.151 24.240 24.554
Australia Melbourne 14.320 14.180 14.076 13.986 13.742 ... 14.647 14.232 14.191 14.269 14.742
Sydney 17.567 17.854 17.734 17.592 17.870 ... 18.176 17.999 17.713 17.474 18.090
Bangladesh Dhaka 25.905 25.931 26.095 25.927 26.136 ... 26.536 26.648 25.803 26.284 26.587
... ... ... ... ... ... ... ... ... ... ... ...
United States Chicago 11.090 11.703 11.532 10.482 10.943 ... 10.298 11.816 11.214 12.821 11.587
Los Angeles 16.643 16.466 16.430 16.945 16.553 ... 16.677 15.887 15.875 17.090 18.121
New York 9.969 10.931 11.252 9.836 10.389 ... 10.142 11.358 11.272 11.971 12.164
Vietnam Ho Chi Minh City 27.589 27.832 28.065 27.828 27.687 ... 27.853 28.282 27.675 28.249 28.455
Zimbabwe Harare 20.284 20.861 21.079 20.889 20.308 ... 20.524 21.166 20.782 20.523 19.756
Calculating on a pivot table 数据透视表——计算
得到数据透视表后,我们就可以对这个数据透视表进行一些运算。
# 这里就是一些简单的计算了
# Get the worldwide mean temp by year
mean_temp_by_year = temp_by_country_city_vs_year.mean()
# Filter for the year that had the highest mean temp
print(mean_temp_by_year[mean_temp_by_year == mean_temp_by_year.max()])
# Get the mean temp by city
mean_temp_by_city = temp_by_country_city_vs_year.mean(axis="columns")
# 也可以axis = 1 表示的意思一样,跨列计算
# Filter for the city that had the lowest mean temp
print(mean_temp_by_city[mean_temp_by_city == mean_temp_by_city.min()])
因为我们这里都不是用的切片,用切片的话得到的一直还会是dataframe,如果不是切片就会变成series。
那么像第二行代码里面这个,就是一个布尔值。
# 这里就是最大的为true,不是最大的都为False
In [2]:
mean_temp_by_year == mean_temp_by_year.max()
Out[2]:
year
2000 False
2001 False
2002 False
2003 False
2004 False
2005 False
2006 False
2007 False
2008 False
2009 False
2010 False
2011 False
2012 False
2013 True
dtype: bool
我们需要在它外面额外加一个框并贴上原来的dt名称,这样pandas就会去找那个唯一的true值,并输出
In [1]:
mean_temp_by_year[mean_temp_by_year == mean_temp_by_year.max()]
Out[1]:
year
2013 20.312
dtype: float64
Reference
学习网站:Datacamp
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)