本文是根据官方网站上《10Minutes to pandas》的一个简单的翻译,这篇文章是对pandas的一个简单的介绍,并且补充了一些东西,加了一些详细说明。官方导入的框架
1.0 创建对象
请参见数据结构介绍部分1.1 通过传入一个列表数据创建一个Series,pandas默认会生成一个整形索引
1.2 通过传入一个numpy的数组,一个时间列表作为索引,和列标签来创建一个DataFrame
解释及扩展:1> dates = pd.date_range('20130101',periods=6) 生成一个以20130101开始的6个日期的数据,也可以用下面这种写法
2> np.random.randn(6,4)生成一个6行4列的二位数组,效果如下
1.3 通过传入一个能够被转换成类似序列结构的字典对象来创建一个DataFrame:
1.4 查看每列的数据类型
1.5 如果你使用的是IPython,tab自动补全功能将会可用的,能自动补全列名等一些属性,下面是能被补全属性的一个子集
2. 查看数据
查看基础部分
2.1 查看frame前面和后面的几行数据
说明:df.head()输出前几行数据,默认返回五行,可以输入参数指定返回的条数,df.head(3),返回3行,df.tail()同理
2.2 显示列索引和行索引以及根数据
2.3 Describe函数对数据进行一个统计显示
说明:count:这一列的数据个数 mean:这一列的平均数值 std:这一列的标准偏差 min:该列最小值 max:该列最大值
2.4 数据转置
2.5 通过轴线进行排序
说明:axis表示以哪个轴为基准,1表示以列索引为基准,0表示以航索引为基准;ascending表示是否升序,False表示降序,True表示升序,默认是升序排列
例: axis=0,以列索引为基准进行排列,默认升序,为了看出效果,我传入第二个参数,设置降序排列;更多情况请自行尝试
2.6 按列进行数据排序,ascending参数依旧有效
3.数据查找(截取)
注意:虽然查找和设置数据可以通过标准的Python/Numpy实现,但我们推荐经过优化的pandas数据访问方式: .at, .iat, .loc, .iloc 和 .ix
查看索引文档Indexing and Selecting Data 和 MultiIndex / Advanced Indexing
3.1 获取数据
3.1.1 查找一列,返回一个Series数据,等同于df.A
3.1.2 通过[]查找,通过切片的方式
3.2 通过标签查找数据
查看更多通过标签查找
3.2.1 通过标签获取一个交叉区域
3.2.2 通过标签,在多个轴上进行数据查找
说明:两个参数,第一个参数为选择的行索引上的范围,第二个参数表示在列索引上的截取范围
3.2.3 两个轴都设定截取范围
3.2.4 缩小这返回数据的规模
3.2.5 获取一个标量的值
3.2.6 快速访问一个标量的值,等同于上一个方法
3.3 通过位置查找
3.3.1 通过传入一个整数位置进行查找,查询的是行,从0开始编号,3:表示查找第四行
3.3.2 通过传入整数列表来查找数据,类似于numpy/python的风格
说明:表示查找索引为1,2,4行和1,2列是数据
3.3.3 通过行切片的方式查找
3.3.4 通过列切片的方式查找数据
3.3.5 获取具体位置的值
两个方法效果相同,获取第1行第一列的数据
3.4 通过布尔方式查找
3.4.1 通过某一列作为判断条件获取数据
说明:表示获取A列数字大于0的所有行
3.4.2 从DataFrame中查找每个位置满足条件的数据
说明:表示显示所有大于0的数据,不大于0的数据显示为NaN
3.4.3 通过 isin()
函数进行过滤
3.5 数据设置
3.5.1 生成一个新的数列,通过索引自动排列
说明:index=pd.date_range('20130102',periods=6)依然可以用index=pd.date_range('1/2/2013',periods=6)代替
3.5.2 通过标签设置新值
3.5.3 通过位置设置新值
3.5.4 通过numpy数组设置一组新值
说明:len(df)会返回df的行数(6),np.array([5]*len(df))会生成一个有6个值的数组,并且每个值为5,把整个数组赋值给D列
3.5.5 经过设置后的df结果
3.5.6 通过where操作进行设置
4.丢失的数据
pandas主要用np.nan代替这丢失的数据,这些值默认不包含在计算机中,请看这 数据丢失部分
4.1 Reindexing允许你在指定轴上修改、增加或删除索引,结果返回一个原始数据的拷贝
4.2 查找任何数据都没有丢失的行
4.3 给所有丢失的数据设置新值
4.4 判断一个位置上的值是否丢失,返回布尔值
5.操作
参看:Basic section on Binary Ops
5.1 统计
操作通常不包括缺失值的
5.1.1 执行描述性统计(平均值)
5.1.2 在其他轴上进行描述性统计(行索引)
说明:上面两个是同一个方法,传入参数区别,参数只有0和1两个值,0表示列索引轴,可以省略;1表示行索引轴
5.1.3 不同维度的 pandas 对象也可以做运算,它会自动进行对应,shift 用来做对齐操作;对不同维度的 pandas 对象进行减法操作
5.2 Apply(我操,不懂该如何翻译了,作用就是对df执行括号中的方法,括号中传入的参数是一个方法(函数))
5.3 直方图
查看更多Histogramming and Discretization
5.4 字符串方法
查看更多Vectorized String Methods.
6.合并
6.1 数据合并
Pandas对Series,DataFrame和Panel对象进行各种符合各种逻辑关系的合并操作提供了各种各样的方法。
6.1.1 用concat()
把pandas的对象合并到一起
我觉得官方的数据不够直观,我自己做了一个图,详细请看:
6.1.2 join(不知道用什么合适的词进行翻译)
类似于SQL风格的合并,参看: Database style joining
这里就呵呵了,我也没太弄明白,不知道该如何描述
6.1.3 Append(解释成追加?类似于数组的append)
增加一行到dataframe中. 参看 Appending
7.Grouping(组操作)
对于组操作通常有下面几种情况
Splitting:根据一些规则把数据进行分割
Applying:每组数据执行不同啊方法
Combining:把结果融入到一个数据结构中
查看: Grouping section
7.1 根据条件分组,并且把分组的结果进行求和
说明:先根据A进行分组,分为foo和bar两组,把两组的结果进行求和
7.2 根据多个列进行分组,形成一个多级索引,并执行函数
8.Reshaping
具体参看: Hierarchical Indexing 和Reshaping.
8.1 Stack
8.1.1 用 stack()
方法对DataFrame的列进行压缩
8.1.2 解压缩
8.2 数据透视表(这部分我也不太明白,有待学习和修改)
参见: Pivot Tables.
8.2.1从数据中生成透视表
9.时间序列
pandas对频率转换重采样操作有很简洁、强大且有效的方法(把按秒采样转换为以5分钟为单位的采样数据),在金融领域是比较常见的
一下是我转为30秒采样的结果
9.1 时区表示
9.2 时区转换
9.3 时间跨度转换
9.4 以周期时间转换
10. 分类
从0.15版本开始,pandas可以在DataFrame中支持Categorical类型的数据,参看:categoricalintroduction和APIdocumentation
df = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":['a', 'b', 'b', 'a', 'a', 'e']})
10.1 将原始的grade转换为Categorical数据类型
10.2 重新命名
df["grade"].cat.categories = ["very good", "good", "very bad"]
10.3 对类别重新进行排序,并增加确实的类别
df["grade"] = df["grade"].cat.set_categories(["very bad", "bad", "medium", "good", "very good"])
10.4 根据分类顺序进行排序,不根据字典顺序
10.5 通过分类进行分组,包括空类
11.绘图
Plotting 绘图文档
11.1 生成单线图
生成的结果如下图
注意:这里我要强调,我生成的数据都是随机,所以每次生成的图像都不同,用这些代码生成图片的时候跟我的不一样,不要以为是错的,图能出来就是对的,切记
如果想保存图片的,在plt.show()前面执行plt.savefig("./cos.png")这行代码,参数是路径和图片的名称,具体线条颜色什么的设置参考matplotlib框架
11.2 生成多线图
12.数据的存取
12.1 对CSV文件的存取
12.2 对HDF5的存储
12.3 对Excel的存储