原文:https://zhuanlan.zhihu.com/p/33230331
如果你在使用 Pandas(PythonData Analysis Library) 的话,下面介绍的对你一定会有帮助的。
首先我们先介绍一些简单的概念
- DataFrame:行列数据,类似 Excel 的 sheet,或关系型数据库的表
- series:单列数据
- axis:0:行,1:列
- shape:DataFrame的行列数,(行数,列数)
1. 加载 CSV
Read_csv 方法有很多参数,有效的利用这些参数可以减轻数据预处理的工作。谁都不愿意做数据清洗,那么我们就在加载数据的时候做一些简单的数据处理
- 直接加载
- 无参数加载
-
-
- 选择特定列加载
-
-
- 时间转换加载
-
- 分批加载
-
有时我们可能需要加载的 csv 太大,可能会导致内存爆掉,这时候,我们就需要分批加载数据进行分析、处理
2. 浏览 DataFrame 数据
- df.head(n):浏览数据的前 n 行,默认 5 行
- df.tail(n):浏览数据的末尾 n 行,默认 5 行
- df.sample(n):随机浏览 n 行数据,默认 5 行
- df.shape:tuple 类型的数据行列数,(行数,列数)
- df.describe():计算评估数据的趋势
- http://df.info():内存和数据类型
-
3. 在 DataFrame 中增加列
在 DataFrame 中添加新列的操作很简单,下面介绍几种方式
- 简单方式
- 直接增加新列并赋值
- df['new_column'] = 1
- 计算方式
- df['temp_diff'] = df['atemp'] - df['temp']
- 直接增加新列并赋值
- 条件方式
- 我们仅仅根据风速,简单判断一下人体舒适度,体感比较舒服的温度是 0.3 米/秒
-
- 循环方式
- 我们将 season 转换为具体季节的名称
-
4. 选择指定单元格
类似于 Excel 单元格的选择,Pandas 提供了这样的功能,操作很简单,但是我本人理解起来确实没有操作看上去那么简单。Pandas 提供了三个方法做类似的操作,loc,iloc,ix,ix 官方已经不建议使用,所以我们下面介绍 loc 和 iloc
- loc 根据标签选取loc
- df.loc[行索引开始位置:行索引结束位置,[列名数组]]
- iloc 根据索引选取
- df.iloc[行索引开始位置:行索引结束位置,列索开始位置:列索引结束位置]
- 选取行数据
- df.loc[[行索引数组]],df.iloc[[行索引数组]]
-
注意:
- 索引开始位置:闭区间
- 索引结束位置:开区间
- loc 和 iloc 选取整列数据的时候,看上去与 df[列名数组] 的方式一致,但是其实前者返回的仍然是 DataFrame,后者返回的是 Series
-
条件过滤
我们需要看第一季度的数据是怎样的,就需要使用条件过滤
体感的舒适适湿度是40-70,我们试着过滤出体感舒适湿度的数据
最后整合上面两种条件,在一季度体感湿度比较舒适的数据
列排序
数据按照某列进行排序
“by”参数可以使用字符串,也可以是列表,ascending 的参数也可以是单个值或者列表
ascending 默认值是 True
列中的每行上的 apply 函数
在前一篇的增加列的部分,根据风速计算人体感觉是否舒适,为了功能的演示,在这里使用 DataFrame 的 apply 方法,他会在指定列的每个值上执行。详见代码:
均值和标准差
我们通过 describe 方法查看的统计信息中均值和方差都是按照列统计呢,这里要说的,既可以按照列,还可以按照行
均值,行 df.mean(axis=0),列df.mean(axis=1)
方差,行 df.std(axis=0),列df.std(axis=1)
DataFrame 转换为 Numpy
DataFrame 合并
连接合并
在两个 df 的结果一致的情况下,我们可以简单两个 df 拼接起来
垂直(行)拼接,pd.concat([df1,df2],axis=0),水平(列)拼接,pd.concat([df1,df2],axis=1)
基于索引关键字合并
Pandas 还提供了像 SQL 一样的连接,内联,外联,左联,右联
作为我们的示例数据,可以唯一标识一行的就是 Datatime 列
merged_df = df_1.merge(df_2, how='left', on='datetime')
在 DataFrame 中查找 NaN
每行有多少 NaN,df.isnull().sum()
Dataframe 中 NaN 的总数,上面统计出来的数量求和,df.isnull().sum().sum()
分组 Group By
分组在数据统计的时候经常使用。特别是统计数量、计算和、求平均值,等等。
我们在这里统计一下每个季度的假期数是多少
在统计一下,每个季度的平均分风速是多少
定义范围
如果我们想根据风力把风的等级区分出来,你可能可快就想到上面刚刚介绍的 apply,不过,现在介绍另外一种方式
通过这两次的分享,我们已经了解了 pandas 数据处理常用的方式方法。