pandas

转载于: http://c.biancheng.net/pandas/

pandas主要特点

提供一个简单、高效、带有默认标签(也可以自定义标签)的DataFrame对象;

能够快速得从不同格式的文件中加载数据(如:Excel、CSV、SQL文件),然后将其转换为可处理的对象;

能够按照数据的行、列标签进行分组,并对分组后的对象执行聚合和转换操作;

能够很方便地实现数据归一化操作和缺失值处理;

能够很方便地对DataFrame的数据列进行增加、修改、或者删除的操作;

能够处理不同格式的数据集,比如:矩阵数据、异构数据表、时间序列等;

提供了多种处理数据集的方式,如:构建子集、切片、过滤、分组等;

pandas主要优势

DataFrame和Series构建了适应于数据分析的存储结构

简洁的API;

实现与其他库的集成,如:Matplotlib、scikit-learn等

pandas内置数据结构

在ndarray数据(numpy中的数组)的基础上构建了两种不同的数据结构:

Series(一维数据结构):带列标签,可以理解为索引,不局限于整数,也可以是字符类型。

DataFrame(二维数据结构):一种表格型数据结构,它既有行标签,也有列标签。

 

1. Series

Series结构,也称Series序列,由一组数据值(value)和一组标签组成,其中标签与数据值之间是一一对应关系。

 

1.1 创建Series对象

df=pd.Series( data, index, dtype, copy)

参数:

1.1.1 ndarray创建Series对象

ndarray 是 NumPy 中的数组类型,当 data 是 ndarry 时,传递的索引必须具有与数组相同的长度。假如没有给 index 参数传参(这种设置方式称为“隐式索引”),在默认情况下,索引值将使用是 range(n) 生成,其中 n 代表数组长度。

例:使用“显示索引”

import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
#自定义索引标签(即显示索引)
s = pd.Series(data,index=[100,101,102,103])
s

 

1.1.2 dict(字典)创建Series对象

把dict作为输入数据,如果没有传入索引时会按照字典的键来构造索引,反之,当传递了索引时需要将索引标签与字典中的值一一对应。

例一:没有传索引时

data = {"a": 1, "b":2, "c":3}
s = pd.Series(data)
print(s)

 例二:未index参数传递索引时

data = {"a": 1, "b":2, "c":3}
s = pd.Series(data,index=['b','c','d','a'])
print(s)

注:当传递的索引值无法找到对应的值时,使用NaN(非数字)填充。

1.1.3 标量创建Series对象

如果data是标量值,则必须提供索引。

s = pd.Series(5, index=[0, 1, 2, 3])
print(s)

注:标量值按照index的数量进行重复,并一一对应。

 

1.2 访问Series数据

1.2.1 位置索引访问/索引标签访问

这种访问方式与 ndarray 和 list 相同,使用元素自身的下标进行访问。我们知道数组的索引计数从 0 开始,这表示第一个元素存储在第 0 个索引位置上,以此类推,就可以获得 Series 序列中的每个元素。

s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print(s[0])  #位置访问
print(s['a']) #标签访问

通过切片的方式访问Series序列中的数据:

s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print(s[:3])

 

1.3 Series常用属性

s = pd.Series(np.random.randn(5))
print(s)
# 
print("---------axes---------")
print(s.axes)
print("---------dtype---------")
print(s.dtype)
# 返回一个布尔值,用于判断数据对象是否为空
print("---------empty---------")
print("是否为空对象?")
print (s.empty)
# 查看序列的维数。根据定义,Series 是一维数据结构,因此它始终返回 1
print("---------ndim---------")
print (s.ndim)
# 返回 Series 对象的大小(长度)
print("---------size---------")
print(s.size)
# 以数组的形式返回 Series 对象中的数据
print("---------values---------")
print(s.values)
# 该属性用来查看 Series 中索引的取值范围
print("---------index---------")
s=pd.Series([1,2,5,8],index=['a','b','c','d'])
print(s.index)
#隐式索引
s1=pd.Series([1,2,5,8])
print(s1.index)

 

2. DataFrame

2.1 DataFrame结构

一个表格型的数据结构,有行标签(index),又有列标签(columns),它也被称异构数据表,异构指的是表格中每列的数据类型可以不同比如可以使字符串、整型、浮点型等。

 

 

 

2.2 创建DataFrame对象

语法:

import pandas as pd
pd.DataFrame( data, index, columns, dtype, copy) 

参数:

 

2.2.1 列表创建DataFrame对象

可以使用单一列表或嵌套列表创建一个DataFrame

例一:单一列表创建

data = [1,2,3,4,5]
df = pd.DataFrame(data)
print(df)

例二:使用嵌套列表创建

data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])
print(df)

2.2.2 字典嵌套列表创建

data字典中,键对应的值的元素长度必须相同(也就是列表长度相同)。如果传递了索引,那么索引的长度应该等于数组的长度;如果没有传递索引,那么默认情况下,索引将是range(n),其中n代表数组长度。

data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
print(df)

2.2.3 列表嵌套字段创建DataFrame对象

列表嵌套字典可以作为输入数据传递给DataFrame构造函数。默认情况下,字典的键被用作列名。

data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print(df)

 

2.3 列索引操作DataFrame

可以使用列索引(columns index)引来完成数据的选取、添加和删除操作。

2.3.1 列索引添加数据列

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
# 使用df['列']=值,插入新的数据列
df['three']=pd.Series([10,20,30],index=['a', 'b', 'c'])
print(df)
# 将已经存在的数据列做相加运算
df['four']=df['one'] + df['three']
print(df)

除了使用df[]=value的方式外,还可以使用insert()方法插入新的列:

info=[['Jack',18],['Helen',19],['John',17]]
df=pd.DataFrame(info,columns=['name','age'])
print(df)
#注意是column参数
#数值1代表插入到columns列表的索引位置
df.insert(1, column='score',value=[11,22,33])
print(df)

2.3.2 列索引删除数据列

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']),
   'three' : pd.Series([10,20,30], index=['a','b','c'])}
df = pd.DataFrame(d)
print(df)
# 使用del删除
del df['one']
print(df)
# 使用pop方法删除
df.pop('two')
print(df)

2.3.3 行索引操作DataFrame

1. 标签索引选取

可以将行标签传递给 loc 函数,来选取数据。

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(df.loc['b'])

注意:loc 允许接两个参数分别是行和列,参数之间需要使用“逗号”隔开,但该函数只能接收标签索引。

 

2. 整数索引选取

通过将数据行所在的索引位置传递给 iloc 函数,也可以实现数据行选取。

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print (df.iloc[2])

注意:iloc 允许接受两个参数分别是行和列,参数之间使用“逗号”隔开,但该函数只能接收整数索引。

 

3. 切片操作多行选取

可以使用切片的方式同时选取多行。

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
#左闭右开
print(df[2:4])

4. 添加数据行

使用 append() 函数,可以将新的数据行添加到 DataFrame 中,该函数会在行末追加数据行。

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
#在行末追加新数据行
df = df.append(df2)
print(df)

5. 删除数据行

可以使用行索引标签,从 DataFrame 中删除某一行数据。如果索引标签存在重复,那么它们将被一起删除。

 

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
df = df.append(df2)
print(df)
#注意此处调用了drop()方法
df = df.drop(0)
print (df)

默认使用 range(2) 生成了行索引,并通过 drop(0) 同时删除了两行数据。

 

2.4 常用属性和方法汇总

 

2.5 pandas描述性统计

 

2.6 pandas csv读取文件

文件的读写操作属于计算机的IO操作,pandas IO操作提供了一些读取器函数,比如 pd.read_csv()、pd.read_json 等,它们都返回一个 Pandas 对象。

语法:

pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',names=None, index_col=None, usecols=None)

 

# 指定一个列,然后使用index_col可以实现自定义所以
df=pd.read_csv("C:/text.csv",index_col=['ID'])
# 转换salary字段为float类型
df=pd.read_csv("C:/text.csv",dtype={'salary':np.float64})
# 自定义文件标头名,但是原来的标头名(列标签名)并没有被删除,此时可以使用header参数来删除它。
df=pd.read_csv("C:/text.csv",names=['a','b','c','d','e'],header=0)
# 跳过指定的行号,:标头也算是一行
df=pd.read_csv("C:/text.csv",skiprows=2)

 

posted @ 2023-05-22 13:56  小王同学学编程  阅读(47)  评论(0编辑  收藏  举报
levels of contents