Pandas中有很多类,但是常用的类有三个:Series,DataFrame,Index.
Series:基本数据结构,一维标签数据,能保存任何数据类型
DataFrame:基本数据结构,一般为二维数组,是一组有序的列
文章篇幅较长,可以通过左下角的目录来帮助查看。
一、Series
1、基本语法格式:
class pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
参数说明:
data:表示接收的数据
index:表示索引
name:series的名称
2、list、ndarray、Series的简单比较
(1)list列表,列表中的元素可以是不同的数据类型,使用从0开始的整数值作为默认索引;
(2)ndarray数组,数组中的元素必须是同种数据类型,使用从0开始的整数值作为默认索引;
(3)Series序列,是一维结构,类似于一维列表和ndarray中的一维数组,但是功能比他们要更为强大,Series由两部分组成:索引index和数值values;
一维列表和一维数组中都是采用从0开始的整数值作为默认索引,索引值一般不显示的给出,但是我们可以通过索引去获取其中的元素。对于Series来说,默认索引也是从0开始的整数值作为默认索引,但是是显示地给出,更为强大的是,Series中的索引可以随意设置,方便我们取数。
代码操作:
import numpy as np
import pandas as pd
l1 = [1, 2, '列表', 4.5] # 列表可储存各种数据类型
print(l1)
print(l1[3])
n1 = np.array([1,2,3,4,5])
n2 = np.array(['a', 'b', 'c'])
print(n1)
print(n2)
print(n2[2])
s1 = pd.Series([1,3,5,7], index = ['a', 'b', 'c', 'd'])
print(s1)
print(s1[2]) # 索引从0开始,所以s1[2]对应3.
print(s1['d'])
结果展示:
3、Series数据构成
Series数据由行索引和一组数据构成。因为数据是一维的(只有一列),所以Series只有行索引,没有列索引。
如下图,左边是默认从0开始的索引,右边是数据的值。
4、创建Series
Series数据可以通过列表、字典、数组来创建,在创建的过程中可以定义name和index。
(1)通过列表创建
x = [1,2,3,4] # 列表
y = pd.Series(x,index=["a","b","c","d"],dtype=np.float32) # 指定浮点型数据
display(y)
# 索引是abcd,值是浮点型的1234
结果展示:
(2)通过字典创建
x = dict(a=11,b=22,c=33)
y = pd.Series(x)
print(y)
结果展示:
(3)通过数组创建
x = np.arange(1,9,2) # 从1到6,步长是2
y = pd.Series(x)
print(y) # x指定的是值,所以索引默认从0开始
结果展示:
5、Series常用属性
(1)基本属性
s = pd.Series([11,22,33,44,55,66])
print(s.ndim) # 返回series的维度
print(s.dtype) # 返回series的数据类型
print(s.size) # 返回series的个数
结果展示:
(2)index和values属性
s = pd.Series([11,22,33,44,55], index = ['a', 'b', 'c', 'd', 'e'])
print(s.index)
print(s.values)
结果展示:
(3)删除数据和添加数据
s = pd.Series([11,22,33,44,55], index = ['a', 'b', 'c', 'd', 'e'])
s.drop('e', inplace = True) # 删除数据
print(s)
s['h'] = 77 # 添加数据
print(s)
结果展示:
(4)算数运算
s1=pd.Series(np.arange(5),index=['a','b','c','d','e'])
s2=pd.Series(np.arange(5,10),index=['a','b','c','d','e'])
print(s1+s2)
s4=pd.Series(['张三','李四','王五','赵六','麻七'],index=['a','b','c','d','e'])
s5=pd.Series(['1','2','3','4','5'],index=['a','b','c','d','e'])
print(s4+s5)
结果展示:
(5)数据对齐
# 数据对齐是指pandas自动将数据转换为统一的数值类型
s=pd.Series([1,2,3,'',4],name='A',index=['a','b','c','d','e'])
print(s)
结果展示:
二、DataFrame
1、基本语法格式
class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
参数说明:
data:表示接收的数据
index:表示索引
columns:表示那一列的名字
2、DataFrame数据构成
DataFrame有行数据和列数据,是二维结构。最左边一侧是索引,除了索引的其余为数据。索引默认从0开始。
3、创建DataFrame
DataFrame数据可以通过列表、字典、数组来创建。
(1)通过列表创建
x = [[23, '张三'], [34, '李四'], [38, '王五'], [45, '赵六'], [53, '麻七']]
print(pd.DataFrame(x, index = ['a', 'b', 'c', 'd', 'e'], columns = ['年龄', '姓名']))
结果展示:
(2)通过字典创建
x = {'年龄': [23, 34, 38, 45, 53], '姓名': ['张三', '李四', '王五', '赵六', '麻七']}
print(pd.DataFrame(x, index = ['a', 'b', 'c', 'd', 'e']))
结果展示:
(3)通过数组创建
data=np.random.randn(6,4) #创建一个6行4列的数组
print(pd.DataFrame(data,columns=list('ABCD'),index=[1,2,3,4,5,6]))
结果展示:
4、DataFrame常用属性
(1)基本属性
x = [[23, '张三'], [34, '李四'], [38, '王五'], [45, '赵六'], [53, '麻七']]
df=pd.DataFrame(x, index = ['a', 'b', 'c', 'd', 'e'], columns = ['年龄', '姓名'])
print(df.index) # 输出DataFrame的Index属性
print(df.columns) # 输出DataFrame的列标签
print(df.axes) # 输出DataFrame的行标签
print(df.ndim) # 输出DataFrame的维度
print(df.shape) # 输出DataFrame的形状
结果展示:
(2)DataFrame按列读取
x = [[23, '张三', '河北'], [34, '李四', '河南'], [38, '王五', '北京'], [45, '赵六','天津'], [53, '麻七','山东']]
df=pd.DataFrame(x, index = ['a', 'b', 'c', 'd', 'e'], columns = ['年龄', '姓名','籍贯'])
df.年龄
df[['年龄','籍贯']]
df.iloc[:,1:3]
①df. 列名
②df.[['列名1' , '列名2']]
③df.iloc[:,列2:列3]
df.iloc[:1] 读取第一列
df.iloc[:,1:3] 读取第二列到第三列的数据
(3)DataFrame按行读取
x = [[23, '张三', '河北'], [34, '李四', '河南'], [38, '王五', '北京'], [45, '赵六','天津'], [53, '麻七','山东']]
df=pd.DataFrame(x, index = ['a', 'b', 'c', 'd', 'e'], columns = ['年龄', '姓名','籍贯'])
df.loc[['a','c','d']]
df.iloc[['0','2','3']]
①df.loc[['行标签1','行标签2','行标签3']]
②df.iloc[['行号1','行号2','行号3']]
(4)DataFrame的赋值
x = [[23, '张三', '河北'], [34, '李四', '河南'], [38, '王五', '北京'], [45, '赵六','天津'], [53, '麻七','山东']]
df=pd.DataFrame(x, index = ['a', 'b', 'c', 'd', 'e'], columns = ['年龄', '姓名','籍贯'])
df.年龄=[11,22,14,26,29]
print(df)
df.loc['c'] = [99,'一二','山西']
print(df)
①按列赋值
df.列名 # 改变这一列的数值
②按行赋值
df.loc['行标签'] = [] # 改变对应一行的数值
(5)DataFrame的插入
x = [[23, '张三', '河北'], [34, '李四', '河南'], [38, '王五', '北京'], [45, '赵六','天津'], [53, '麻七','山东']]
df=pd.DataFrame(x, index = ['a', 'b', 'c', 'd', 'e'], columns = ['年龄', '姓名','籍贯'])
df.insert(2,'性别', ['男','男','男','男','男'])
print(df)
row={'年龄':77,'姓名':'三四','性别':'男', '籍贯':'上海'}
df.loc['f']=row
print(df)
①插入一列
df.insert(ioc,column,value)
ioc:要插入的位置
colunm:列名
value:值
②插入一行
row={'年龄':77,'姓名':'三四','性别':'男', '籍贯':'上海'}
df.loc['行索引']=row
(6)DataFrame的删除
drop(labels, axis=0, level=None, inplace=False)
lables:要删除数据的标签
axis:0表示删除行,1表示删除列,默认0
inplace:是否在当前df中执行此操作