pandas数据结构之DataFrame

栏目: 数据库 · 发布时间: 5年前

内容简介: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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTML Dog

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》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具