转载于: 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)
标签:index,df,Series,索引,pd,print,pandas From: https://www.cnblogs.com/xiao-wang-tong-xue/p/17412606.html