内容简介:DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。下面记录DataFrame的常见使用,引入pandas约定:创建一个DataFrame最常见的方法是传入一个等长的列表或者Numpy数组组成的字典。
DataFrame入门
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。
下面记录DataFrame的常见使用,引入pandas约定:
from pandas import Series,DataFrame import pandas as pd
DataFrame基本操作
1. 创建一个DataFrame数据框
创建一个DataFrame最常见的方法是传入一个等长的列表或者Numpy数组组成的字典。
In [16]: d = { ...: "name":["cat","dog","lion"], ...: "age":[3,5,6], ...: "sex":["male","female","male"] ...: } In [17]: d Out[17]: {'name': ['cat', 'dog', 'lion'], 'age': [3, 5, 6], 'sex': ['male', 'female', 'male']} In [18]: df = pd.DataFrame(d) In [19]: df Out[19]: name age sex 0 cat 3 male 1 dog 5 female 2 lion 6 male
2. 查看数据框的概述
In [20]: df.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 3 entries, 0 to 2 # 三个索引,从0到2 Data columns (total 3 columns): # 字段信息 name 3 non-null object # 字符串类型 age 3 non-null int64 # 整型 sex 3 non-null object # 字符串类型 dtypes: int64(1), object(2) # 统计数据类型信息 memory usage: 152.0+ bytes # 占用内存大小
3. 切片和索引
3.1 基于列索引进行切片
In [24]: df.age Out[24]: 0 3 1 5 2 6 Name: age, dtype: int64 In [25]: df['age'] Out[25]: 0 3 1 5 2 6 Name: age, dtype: int64 In [26]: df[['age','name']] Out[26]: age name 0 3 cat 1 5 dog 2 6 lion
3.2 基于行索引进行切片
基于行索引进行切片有多种方法,比如DataFrame里的 ix
函数, loc
函数和 iloc
函数等。
In [27]: df.ix[0] D:\work-enviorament\anaconda\Scripts\ipython:1: DeprecationWarning: .ix is deprecated. Please use .loc for label based indexing or .iloc for positional indexing See the documentation here: http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated Out[27]: name cat age 3 sex male Name: 0, dtype: object
使用 ix函数
可以进行行索引的切片,但是pandas建议使用loc或者iloc。
In [28]: df.ix[0:1] D:\work-enviorament\anaconda\Scripts\ipython:1: DeprecationWarning: .ix is deprecated. Please use .loc for label based indexing or .iloc for positional indexing See the documentation here: http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated Out[28]: name age sex 0 cat 3 male 1 dog 5 female In [29]: df[0:1] # 类似列表的切片操作 Out[29]: name age sex 0 cat 3 male In [30]: df[0:2] Out[30]: name age sex 0 cat 3 male 1 dog 5 female
同样,也可以使用类似列表切片的操作进行行索引切片,不过ix函数的这种操作会包括右边的索引,切的范围不同。
对于切出来的数据,数据类型还是数据框的,可以继续切片(多重切片)。
In [36]: df[0:2]['name'] Out[36]: 0 cat 1 dog Name: name, dtype: object
4. 选取和修改值
In [37]: df Out[37]: name age sex 0 cat 3 male 1 dog 5 female 2 lion 6 male In [38]: df['age'] Out[38]: 0 3 1 5 2 6 Name: age, dtype: int64 In [39]: df['age'] = 10 # 基于整列的值都修改为10 In [40]: df Out[40]: name age sex 0 cat 10 male 1 dog 10 female 2 lion 10 male In [41]: df['age'][0] = 20 # 修改age列的第一行的值为20 In [42]: df Out[42]: name age sex 0 cat 20 male 1 dog 10 female 2 lion 10 male In [43]: df.age = [3,4,5] # 为多个字段赋值可以传入一个列表 In [44]: df Out[44]: name age sex 0 cat 3 male 1 dog 4 female 2 lion 5 male
5. 数据的筛选
某些情况下,需要根据一些数据进行筛选,比如筛选出年龄大于5岁的人或者居住地区为广州的人等等。
In [44]: df Out[44]: name age sex 0 cat 3 male 1 dog 4 female 2 lion 5 male In [46]: df.age == 4 # 逻辑判断,年龄等于4的,返回一个Series的布尔型数组 Out[46]: 0 False 1 True 2 False Name: age, dtype: bool In [47]: df[df.age == 4] # 根据这个布尔型数组进行索引,返回为True的 Out[47]: name age sex 1 dog 4 female In [48]: df[[False,True,False]] # 这种与上面方法是等价的 Out[48]: name age sex 1 dog 4 female In [51]: df.age > 3 # 大于小于也是可以的 Out[51]: 0 False 1 True 2 True Name: age, dtype: bool
这里也有个小技巧就是,在这些逻辑判断操作的前面加上~号,就可以反转结果,如下:
In [54]: df.age == 3 Out[54]: 0 True 1 False 2 False Name: age, dtype: bool In [55]: ~(df.age == 3) Out[55]: 0 False 1 True 2 True Name: age, dtype: bool
同时也支持多重筛选
In [57]: df Out[57]: name age sex 0 cat 3 male 1 dog 4 female 2 lion 5 male In [58]: (df.age == 3) & (df.name == 'cat') Out[58]: 0 True 1 False 2 False dtype: bool In [59]: df[(df.age == 3) & (df.name == 'cat')] Out[59]: name age sex 0 cat 3 male
pandas的query函数也可以达到筛选功能
In [66]: df.query("age == 3") Out[66]: name age sex 0 cat 3 male In [67]: df.query("(age == 3)&(sex=='male')") Out[67]: name age sex 0 cat 3 male
6. 使用loc与iloc
对于DataFrame的行的标签索引,引入了特殊的标签运算符loc和iloc。它们可以让你用类似NumPy的标记,使用轴标签(loc)或整数索引(iloc),从DataFrame选择行和列的子集。
In [73]: df Out[73]: name age sex 0 cat 3 male 1 dog 4 female 2 lion 5 male In [74]: df.iloc[1] # 根据行标签进行索引,选取行索引为1的行 Out[74]: name dog age 4 sex female Name: 1, dtype: object In [75]: df.iloc[0:2] Out[75]: name age sex 0 cat 3 male 1 dog 4 female
如果行标签不是整数,而是字符串,那么就可以使用loc了。
In [76]: df.index = list('abc') # 将行索引改为abc In [77]: df Out[77]: name age sex a cat 3 male b dog 4 female c lion 5 male In [78]: df.loc['a'] # 选取行索引为a的行 Out[78]: name cat age 3 sex male Name: a, dtype: object In [79]: df.loc[['a','b']] Out[79]: name age sex a cat 3 male b dog 4 female In [80]: df.iloc[0] # 同样也可以使用iloc Out[80]: name cat age 3 sex male Name: a, dtype: object
iloc是根据具体的行的位置进行索引的,也就不管行标签是整数还是字符串类型,而loc是根据行标签进行索引的。
loc和iloc还有支持多个参数进行索引
In [83]: df Out[83]: name age sex a cat 3 male b dog 4 female c lion 5 male In [84]: df.iloc[0:2] # 选取第一行和第二行 Out[84]: name age sex a cat 3 male b dog 4 female In [85]: df.iloc[0:2,1] # 选取列,列索引从0开始,所以选取第二列的数据 Out[85]: a 3 b 4 Name: age, dtype: int64 In [86]: df.iloc[0:2,[0,1]] # 选取多列 Out[86]: name age a cat 3 b dog 4
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 数据结构 – 用于构建文件系统的数据结构?
- 荐 用Python解决数据结构与算法问题(三):线性数据结构之栈
- 数据结构和算法面试题系列-C指针、数组和结构体
- 请问二叉树等数据结构的物理存储结构是怎样的?
- 数据结构——单链表
- 常用数据结构
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
HTML Dog
Patrick Griffiths / New Riders Press / 2006-11-22 / USD 49.99
For readers who want to design Web pages that load quickly, are easy to update, accessible to all, work on all browsers and can be quickly adapted to different media, this comprehensive guide represen......一起来看看 《HTML Dog》 这本书的介绍吧!