10.24 python pandas

# pandas 其实就是numpy 和matplotlib 结合而成
# pandas 有两个数据结构分别是 Series (一维数组结构) 和dataframe 二维表 行索引,也有列索引 这两个都是带有索引的 可以通过索引访问数据而不是简单的下标访问 都是numpy数组演变而来
# pandas 不在局限于数字处理 字符串也可以
# series 用 name 和 index 属性来描述数据值。Series 是一维数据结构,因此其维数不可以改变 相当于二维的一列
# dataframe DataFrame 是一种二维表格型数据的结构,既有行索引,也有列索引。行索引是 index,列索引是 columns。 在创建该结构时,可以指定相应的索引值 行索引可以省略默认为0123 列索引省略后会随机生成不建议省略
import pandas as pd
import numpy as np
# pandas.Series(data,index,dtype) data传入的是np数组或列表或者字典 index 传入是索引列表 会自动按顺序加索引
# data:一组数据(ndarray 类型)
# index:数据索引标签,如果不指定,默认从 0 开始
# dtype:数据类型,默认会自己判断
# copy:表示对 data 进行拷贝,默认为 False

# 创建空的对象
series1=pd.Series()

# list创建
series2=pd.Series(["y","w","j"])
# print(series2)

# np创建 和索引指定
data1=np.array(["cxk","cln","wy"])
series3=pd.Series(data1,index=["a","b","c"])
# print(series3)

# 字典创建 Series 对象 会自动的把key当为索引
series4=pd.Series({"name":"张三","age":"18","sex":"man"})
# print(series4)

# 用标量创建 就只有一行标量的数据 如果index数组有多个 会创建多行但每一行都是标量
series5=pd.Series(5,index=["number","age","sex"])
# print(series5)

# 访问 Series 数据 series[]里面+索引
# print(series3["a"])

# Series 常用属性
# axes          以列表的形式返回所有行索引标签
# dtype         返回对象的数据类型
# empty         返回一个布尔值,用于判断数据对象是否为空
# ndim          返回输入数据的维数
# size          返回输入数据的元素数量
# values        以 ndarray 的形式返回 Series 对象 纯数据不包括索引
# index         返回一个RangeIndex对象,用来描述索引的取值范围 索引所有可能的值
# print(series4.axes)
# print(series4.dtype)
# print(series4.empty)
# print(series4.ndim)
# print(series4.size)
# print(series4.values)
# print(series4.index)

# Series 常用方法
# head() 和 tail()
# 查看 Series 的某一部分数据,使用 head() 或者 tail() 方法。其中 head() 返回前 n 行数据,默认显示前5 行数据,tail() 返回后 n 行数据,默认为后 5 行
series6=pd.Series(["a","b","c","d","e","f",None])
# print(series6.head(3))
# print(series6.tail(3))

# isnull() 和 nonull() # 可以做过滤器
# isnull() 和 nonull() 用于检测 Series、DataFrame 中的缺失值。所谓缺失值,顾名思义就是值不存在、丢失、缺少
# isnull():如果为值不存在或者缺失,则返回 True
# notnull():如果值不存在或者缺失,则返回 False

# print(series6.isnull())
# print(series6[series6.isnull()==False])

# DataFrame
# DataFrame 一个表格型的数据结构,既有行标签(index),又有列标签(columns),它也被称异构数据表,所谓异构,指的是表格中每列的数据类型可以不同,比如可以是字符串、整型或者浮点型等。其结构图示意图,如下所示:
#       name       age
# 0     "ywj"      18
# 1     "cxk"      23
# 2     "fdg"      12
# DataFrame 的每一行数据都可以看成一个 Series 结构,只不过,DataFrame 为这些行中每个数据值增加了一个列标签
# 同 Series 一样,DataFrame 自带行标签索引,默认为“隐式索引”即从 0 开始依次递增,行标签与DataFrame 中的数据项一一对应当然你也可以用“显式索引”的方式来设置行标签

# pd.DataFrame( data, index, columns,dtype, copy)  data应该为一个二维的数据 构成一个矩阵
# data:一组数据(ndarray、series, map, lists,dict 等类型)
# index:索引值,或者可以称为行标签
# coumns:列标签,默认为 RangeIndex (0, 1, 2,…, n)
# dtype:数据类型
# copy:默认为 False,表示复制数据 data

# 创建空对象
data_frame1=pd.DataFrame()

# 如果传入的是一个一维数组 就是一列 如果传入的是二维数据 那么第二维的数据就应该是按行排 而不是列 列数为每一个的第二维数据的元素个数

# 列表创建 二维数据有一组有个数据缺项的会自动为NaN
data_frame2=pd.DataFrame([["张三",15],["李四",16],["王五",18]],columns=["name","age"])
# print(data_frame2)

# 列表嵌套字典创建 DataFrame 对象 列名就自动获取了 key
data_frame3=pd.DataFrame([{"name": "张三", "age":13},{"name": "李四", "age":14},{"name": "王五", "age":18}])
# print(data_frame3)

# 字典创建 DataFrame 对象 字典的value为list
data_frame4=pd.DataFrame({"name":["张三","李四","王五"],"age":[13,15,16]})
# print(data_frame4)

# Series 创建 DataFrame 对象 传的参数为Series 每一个传入的Series都是一列 传入的时候用字典的方法传嵌套列表有问题 每一个Series都是一列 即他们可以有一个列名 列名为key Series为value
data2=np.array(["张三","李四","王五"])
data3=np.array([15,14,18])
series7=pd.Series(data2)
series8=pd.Series(data3)
data_frame5=pd.DataFrame({"name":series7, "age":series8})
# print(data_frame5)

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

# 选取数据 data_frame["列索引"] 取出列 类型为series
# print(data_frame2["name"])

# 添加数据
# 添加新列 跟字典添加新元素差不多  data_frame["列名"]=[] 这种方法添加的数据个数要和 行数相同 不然报错 np数组也一样
data_frame4["address"]=["成都","广州","烟台"]
# print(data_frame4)

# 以Series的方法添加的数据 可以缺项
data_frame4["number"]=pd.Series([123,12412])
# print(data_frame4)

# 在指定的位置插入新列 data_frame方法 data_frame.insert(loc,column,value) 在loc前面插入
# 使用insert方法在指定位置插入新列,参数:
# loc: 插入位置的列索引。
# column: 新列的名称。
# value: 要插入的 Series。

data_frame4.insert(1,"psd",pd.Series(["123455","25711"]))
# print(data_frame4)

# 修改某一列的值   跟字典一样  进行赋值的覆盖

# 删除 del关键字可以用
# 通过drop方法删除 DataFrame 中的数据,默认情况下,drop() 不会修改原 DataFrame,而是返回一个新的 DataFrame。
# DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None,inplace=False, errors='raise')

# 参数:
# 1. labels:
# 类型:单个标签或列表。
# 描述:要删除的行或列的标签。如果 axis=0,则 labels 表示行标签;如果 axis=1,则 labels
# 表示列标签。
# 2. axis:
# 类型:整数或字符串,默认为 0。
# 描述:指定删除的方向。axis=0 或 axis='index' 表示删除行,axis=1 或 axis='columns' 表示
# 删除列。
# 3. index:
# 类型:单个标签或列表,默认为 None。
# 描述:要删除的行的标签。如果指定,则忽略 labels 参数。
# 4. columns:
# 类型:单个标签或列表,默认为 None。
# 描述:要删除的列的标签。如果指定,则忽略 labels 参数。
# 5. level:
# 类型:整数或级别名称,默认为 None。
# 描述:用于多级索引(MultiIndex),指定要删除的级别。
# 6. inplace:
# 类型:布尔值,默认为 False。
# 描述:如果为 True,则直接修改原 DataFrame,而不是返回一个新的 DataFrame。
# 7. errors:
# 类型:字符串,默认为 'raise'。
# 描述:指定如何处理不存在的标签。'raise' 表示抛出错误,'ignore' 表示忽略错误。

# 列删除
# 方法1 columns属性 index属性
data_frame6=data_frame4.drop(columns=["psd","number"],errors="ignore")
# print(data_frame6)
# 方法2 axis和labels
data_frame7=data_frame4.drop(["psd","number"],axis=1)
# print(data_frame7)

# 行操作
# loc 选取数据 既可以行操作也可以列操作
# df.loc[] 只能使用标签索引,不能使用整数索引 即位置。当通过标签索引的切片方式来筛选数据时,它的取值前闭后闭,也就是只包括边界值标签(开始和结束)
# loc方法返回的数据类型:
# 1.如果选择单行或单列,返回的数据类型为Series
# 2.选择多行或多列,返回的数据类型为DataFrame
# 3.选择单个元素(某行某列对应的值),返回的数据类型为该元素的原始数据类型(如整数、浮点数等)。
# DataFrame.loc[row_indexer, column_indexer] []里面为两个列表 前一个代表行 后一个为列 如果缺省则只对一个进行操作 列表里面输入什么就读什么 如果都输入就两个都操作
# 可以用切片的方式取 这个切片会取到末尾 跟序列切片不一样 传参也不用嵌套列表了 反正就只能传2个参数,切片就相当于字典嘛
data_frame8=pd.DataFrame([["李四",15,"广州"],["张三",13,"成都"],["王五",18,"烟台"]],columns=["name","age","address"],index=["第一个人","第二个人","第三个人"])

# 通过列表的方式
# print(data_frame8.loc[["第二个人","第三个人"],["age","address"]])

# 通过切片的方式 不能通过两个切片 操作行和列
# print(data_frame8.loc["第一个人":"第三个人"])

# iloc 选取数据 loc换成了整数传参
# iloc 方法用于基于位置(integer-location based)的索引,即通过行和列的整数位置来选择数据。 几行几列 必须为整数
# DataFrame.iloc[row_indexer, column_indexer]  这个的切片范围不会取到最后一个
# row_indexer:行位置或布尔数组。
# column_indexer:列位置或布尔数组

# print(data_frame8.iloc[[0,2],[1,2]])
# print(data_frame8.iloc[0:3])

# 切片多行选取 直接切片法 但是这个只能切片 不能列表传参访问
# 通过切片的方式进行多行数据的选取 切片获取行和通过iloc方法获取行从结果上没有区别,切片是基于位置的切片操作,iloc是基于位置的索引操作。
# print(data_frame8[0:2])
# data_frame8[] 传入的是索引的话默认为列索引 切片为行切片 单数字不可以
"""# 添加数据行 dataframe方法 
# _append() 方法用于将一个 Series 或 DataFrame 追加到另一个 DataFrame 的末尾  只能dataframe用
# DataFrame._append(other, ignore_index=False, verify_integrity=False, sort=False)
# 参数:
# 1. other:
# 类型:Series 或 DataFrame。
# 描述:要追加的数据。
# 2. ignore_index:
# 类型:布尔值,默认为 False。
# 描述:如果为 True,则忽略原 DataFrame 的索引,并生成新的整数索引,索引值默认从0开始。 新加的数据索引从0开始
# 3. verify_integrity:
# 类型:布尔值,默认为 False。
# 描述:如果为 True,则在创建具有重复索引的 DataFrame 时引发 ValueError。
# 4. sort:
# 类型:布尔值,默认为 False。
# 描述:如果为 True,则在追加之前对列进行排序。

# 添加
data_frame8._append(pd.Series(["赵六",20,"深圳"],ignore_index=True))
print(data_frame8)"""

# 使用loc[]方法添加新行 df方法
# 使用loc[] 传入一个行index 或者列index 在进行赋值 重复赋值会覆盖(修改) 不能缺项 以Series可以缺项
data_frame8.loc["第四个人"]=["赵六",21,"深圳"]
# print(data_frame8)
# 删除数据行 同上面的drop

# 常用属性和方法
# T               行和列转置。
# axes            返回一个仅以行轴标签和列轴标签为成员的列表。
# dtypes          返回每列数据的数据类型。
# empty           DataFrame中没有数据或者任意坐标轴的长度为0,则返回True。
# ndim            轴的数量,也指数组的维数。
# shape           返回一个元组,表示了 DataFrame 维度。
# size            DataFrame中的元素数量。
# values          使用 numpy 数组表示 DataFrame 中的元素值。
# head()          返回前 n 行数据。
# tail()          返回后 n 行数据
# print(data_frame8.T)
# print(data_frame8.axes)
# print(data_frame8.dtypes)
# print(data_frame8.values)

# 常用的统计学函数 对列进行操作
# count()           统计某个非空值的数量 各个列里面非空的元素个数
# sum()             求和
# mean()            求均值
# median()          求中位数
# std()             求标准差
# min()             求最小值
# max()             求最大值
# abs()             求绝对值
# prod()            求所有数值的乘积
data_frame9=pd.DataFrame([[2,3,4,5,6,7],[23,4,55,25,23,27]],columns=["A","B","C","D","E","F"])
# print(data_frame9.count())
# print(data_frame9.mean())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值