pandas常用数据类型
pandas扩展库是基于扩展库numpy和matplotlib的数据分析模块,是一个开源的项目,提供了大量的标准数据类型,具有高效操作大型数据的功能。
使用pip install pandas
在命令提示符环境下安装扩展库pandas。
常用数据类型:
1.Series,带标签的一维数组
2.DataFrame,带标签且大小可变的二维表格结构
Series简介与常用操作
1.series简介
Series是pandas提供的一维数组,有索引和值两部分组成,是一个类似于字典的结构。值的类型可以不同,默认使用从0开始的整数作为索引,也可以自定义。
2.Series常用操作
import pandas as pd
import matplotlib.pyplot as plt
# 设置输出结果列对齐
pd.options("display.unicode.ambiguous_as_wide",True)
pd.options("display.unicode.east_asian_width",True)
s1 = pd.Series(range(1, 20, 5))
s2 = pd.Series({"语文":90, "数学":92, "Python":98, "物理":87, "化学":92})
# 1.修改指定索引对应值
s1[3] = -17
s2["语文"] = 94
# 2.求绝对值
print(abs(s1))
# 3.s1所有值加五
print(s1+5)
# 4.s1所有索引前加2
print(s1.add_prefix(2))
# 5.绘制s2直方图
s2.hist()
plt.show()
# 6.s2所有索引后加_独角兽
print(s2.add_suffix("_独角兽"))
# 7.s2中最大索引
print(s2.idxmax())
# 8.测试s2的值是否在指定区间内
print(s2.between(90,94,inclusive=True))
# 9.查看s2中大于中值数的数据
print(s2[s2>s2.median()])
# 10.s2数值运算
print(round((s2**0.5)*10, 1))
# 11.s2最小的两个数
print(s2.nsmallest(2))
# 两个等长的Series对象之间可以进行四则运算和幂运算
# 只对两个Series对象中都有相同索引的进行计算
# 非共同索引对应值为NaN
# 12.求两对象和
print(pd.Series(range(5)) + pd.Series(range(5,10)))
# 13.pipe()实现函数链式调用功能,每个值的平方对5的余数
print(pd.Series(range(5)).pipe(lambda x,y,z:(x**y)%z, 2, 5))
# 14.标准差,无偏方差,无偏标准差
print(pd.Series(range(5)).std())
print(pd.Series(range(5)).var())
print(pd.Series(range(5)).sem())
# 15.查看是否存在等价于True的值
print(any(pd.Series([3,0,True])))
# 16.查看是否所有值都等价于True
print(all(pd.Series([3,0,True])))
DataFrame简介与常用操作
1.DataFrame简介
DataFrame是pandas最常用的数据结构,每个DataFrame对象可以看作一个二位表格,由索引(index)、列名(columns)、和值(values)三部分组成。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
pd.set_option("display.unicode.ambiguous_as_wide", True)
pd.set_option("display.unicode.east_asian_width", True)
# 在[1,20]区间上生成5行3列15个随机数
# 使用index参数指定索引,columns参数指定每列标题
df = pd.DataFrame(
np.random.randint(1, 20, (5, 3)),
index=range(5),
columns=["a", "b", "c"]
)
dn = pd.DataFrame(
{"语文":[87,79,67,92],
"数学":[93,89,80,77],
"英语":[90,80,70,75]},
index=["张三", "李四", "王五", "赵六"]
)
print(dn)
# 1.报存为csv文件/excel文件
dn.to_csv("成绩.csv")
dn.to_excel("成绩.xlsx")
# 2.读取csv文件/excel文件
dn = pd.read_csv("成绩.csv", usecols=["语文", "英语"])
# usecols:读取选中列数据,index_col:以莫列为新索引,skiprows:跳过所选行
dn = pd.read_excel("成绩.csv", usecols=["语文", "数学", "英语"], index_col=1)
# 3.筛选符合要求数据
# 3.1切片
print(dn[:])
# 3.2 iloc使用下标为索引
print(dn.iloc[[1,2],[0,1]])
# 3.3 loc使用标签文本作为索引
print(dn.loc[["张三","王五","赵六"],["数学"]])
# 3.4 高于90分的数据
print(dn[dn>90])
# 3.5 isin求张三李四总分
print(dn[dn.index.isin(["张三", "李四"])].sum())
print(dn[dn["语文"].between(90,100)])
# 4.查找语文最高分
print(dn["语文"].max())
print(dn.loc[dn["语文"].idxmax(),"语文"])
# 5. 数据排序
# sort_index(axis=0,ascending=True,inplace=False)函数
# 参数axis=0是表示按行索引排序,axis=1时表示按列名排序
# 参数ascending:true为升序、false为降序
# 参数inplace:true表示原地排序,false表示返回一个新的DataFrame
print(dn.sort_values(by=["语文","数学","英语"], ascending=[False,True,True]))
# 6.分组与聚合
# groupby()函数
ds = pd.DataFrame(
{"语文":[87,79,67,92],
"数学":[93,89,80,77],
"英语":[90,80,70,75]},
index=["张三", "李四", "王五", "赵六"]
)
dn = dn.append(ds)
print(dn.groupby(by=dn.index)["语文", "数学", "英语"].sum())
print(dn.agg({"语文":["max","min"]}))
# 7.处理缺失值
print(dn.dropna())
# 8.处理重复值
print(dn[dn.duplicated()])
dn = dn.drop_duplicates()
print(dn)