各位同学好,今天给大家介绍一下Pandas库中DataFrame类型数据的创建方法和基本操作。
文章内容如下:
(1)使用字典类创建。
字典类有:①数组、列表、元组构成的字典;②Series构造的字典;③字典构造的字典。
(2)使用列表类创建。
列表类有:①二维数组;②字典构造的列表;③Series构成的列表
(3)基本操作。
①查看索引;②指定索引;③转置操作;④通过索引获取数据;⑤追加一列;⑥删除列
首先,我简单介绍一下DataFrame:
① DataFrame数据结构可以理解为python版的excel表格。
② 是表格型数据结构,它包含一组有序的列,每列可以是不同类型的值。
③ DataFrame既有行索引,又有列索引。每列数据可以是不同类型。
④ 可以看作是由Series组成的字典,共用一个索引,数据以二维结构存放。
1. 创建方法--字典类
1.1 使用数组、列表或元组构成的字典构造DataFrame
创建方法:pd.DataFrame(字典名)
创建后,列索引对应的是字典中的标签名,行索引对应默认值。
import pandas as pd# 数组、列表或元组构成的字典构造dataframea1 = {"a":[1,2,3,4],"b":(5,6,7,8),"c":np.arange(9,13)} #建立字典frame1 = pd.DataFrame(a1) # 构造dataframe
1.2 使用Series构造的字典构造DataFrame
创建方法同pd.DataFrame(字典名),展示如下。
字典中标签'a'和'b'对应的值为Series类型。np.arange(3)是利用numpy库创建一个数组[0,1,2];通过pd.Series(数组)将其转化为Series类型的[0,1,2]。
# series构造的字典构造dataframepd1 = pd.DataFrame({"a":pd.Series(np.arange(3)),"b":pd.Series(np.arange(3,5))})
1.3 使用字典构造的字典(字典嵌套)来构造DataFrame
创建方法同pd.DataFrame(字典名),展示如下。
外层字典的标签名为'a','b','c',且标签'a'对应的值是一个字典类型,标签名为'apple','banana',值分别为3.6,5.7。因此a5可看成是由两层字典构成,其本身是一个字典类型,标签对应的值也是字典类型。
# 通过字典构造的字典(字典嵌套)来构造dataframea5 = {"a":{"apple":3.6,"banana":5.7},"b":{"apple":2.1,"banana":8.2},"c":{"apple":5.2}}pd2 = pd.DataFrame(a5)
2. 创建方法--列表类
2.1 使用二维数组构造DataFrame
创建方法:pd.DataFrame(列表)
arr1是利用numpy库产生的由1到12的一维数组,通过reshape(行数,列数)改变数组形状,要求改变后数组的元素个数与原始数组的元素个数相同。
import numpy as np# 二维数组构造dataframearr1 = np.arange(1,13).reshape(4,3)frame4 = pd.DataFrame(arr1)# 指定行列索引,必须与原来的列表,行数和列数相同
2.2 使用字典构造的列表创建DataFrame
创建方法同上:pd.DataFrame(列表)
列表l1是由三个字典构成。创建后,字典内部的key变成列索引。一定要和由字典嵌套创建的DataFrame区分开来。
# 字典构造的列表构造dataframel1 = [{"apple":3.6,"banana":5.0},{"apple":2,"banana":8},{"apple":1.8}]pd3 = pd.DataFrame(l1)
2.3 使用Series构成的列表构造DataFrame
创建方法同上:pd.DataFrame(列表)
列表l2由两个Series类型数据构成。np.random.rand(n)表示随机生成n个0到1之间的数,构成数组,再通过pd.Series()转换成Series类型数据。
# series构成的列表构造dataframel2 = [pd.Series(np.random.rand(3)),pd.Series(np.random.rand(2))]pd4 = pd.DataFrame(l2)
3. 基本操作
3.1 查看索引
查看行索引: 变量名.index 查看列索引: 变量名.columns 查看值: 变量名.values
a2 = frame1.index# 查看行索引a3 = frame1.columns # 查看列索引a4 = frame1.values # 查看value值
3.2 创建时指定索引排序
指定行索引: pd.DataFrame(字典,index=[索引名]) 指定列索引: pd.DataFrame(字典,index=[索引名],columns=[索引名])
此处指定的列索引名必须是原字典中存在的索引,如果不存在,则该列索引名对应的值是nan
a1 = {"a":[1,2,3,4],"b":(5,6,7,8),"c":np.arange(9,13)}frame1 = pd.DataFrame(a1)# 指定index行索引frame2 = pd.DataFrame(a1,index=["Alex","Block","Cici","Dalin"])# 指定columns列索引frame3 = pd.DataFrame(a1,index=["Alex","Block","Cici","Dalin"],columns=["a","b","c","d"])
3.3 转置操作
方法:变量名.T# 行和列互换位置
pd5 = pd.DataFrame(np.arange(1,10).reshape(3,3),index=["a","c","b"],columns=["A","B","C"])# 转置操作,行与列转置,和numpy一样a6 = pd5.T
3.4 通过索引获取列数据
方法:变量名[列索引名]
获取索引名所在列的数据,返回结果是Series类型。对行操作涉及高级索引,本文章只介绍基本操作,其余后续再介绍。
pd5 = pd.DataFrame(np.arange(1,10).reshape(3,3),index=["a","c","b"],columns=["A","B","C"])# 通过索引获取列数据gt = pd5["A"]
3.5 追加一列
方法:变量名[列索引名]=自定义值
此处的列索引名为原DataFrame中不存在的索引名,才能在原数据最后一列追加一组值。如果此处的索引名和原数据中的索引名重复,则会更改原数据中的值。
pd5 = pd.DataFrame(np.arange(1,10).reshape(3,3),index=["a","c","b"],columns=["A","B","C"])# 追加一列pd5["D"] = 9 #该列所有数都是9pd5["E"] = [1,2,3] #该列上各行分别是1,2,3pd5['A'] = [999,888,777] #更改原pd5上'A'列的值
3.6 删除一列
方法: del(变量名[列索引名])# 删除指定列的所有数据
# 删除列del(pd5["D"])