Pandas基本使用(三)

发布时间 2023-11-23 22:12:51作者: DogLeftover
  • 算数运算
"""
前面减后面
    add  加法
    sub  减法
    div  除法
    floordiv 整除
    mul 乘法
    pow 幂次方
后面减前面
    rsub  减法
    rdiv  除法
    rfloordiv 整除
    rpow 幂次方
替换无穷大
    replace(np.inf,0)
    np.nan   NaN
    np.inf   inf
    -np.inf  -inf
"""

path = r"C:\work\python\pandas_files\计算.xlsx"
data = pd.read_excel(path)
print(data)

# 1店的数都增加5
data['1店'] = data['1店'] + 5
print(data)
# 汇总两个店的数据
data['汇总'] = data["1店"] + data["2店"]
print(data)
# 进行空值的处理
data['汇总'] = data['1店'].fillna(0) + data['2店'].fillna(0)
print(data)

import numpy as np
# fill_value=0 在做运算前,将NaN值用0填充
# 加法
data['汇总'] = data['1店'].add(data['2店'], fill_value=0)
print(data)
# 减法sub
data['汇总'] = data['1店'].sub(data['2店'], fill_value=0)
print(data)
# 除法
data['汇总'] = data['1店'].div(data['2店'], fill_value=0)
print(data)
# 将无穷大替换为0
data.replace(np.inf, 0, inplace=True)
print(data)
# 相减
data['汇总'] = data['1店'].sub(data['2店'], fill_value=0)
# 后面减前面
data['汇总1'] = data['1店'].rdiv(data['汇总'], fill_value=0)
data.replace(-np.inf, 0, inplace=True)
print(data)
# 将NaN替换成0
data.replace(np.nan, 0, inplace=True)
print(data)
  • 分层索引
path = r"C:\work\python\pandas_files\销售.xlsx"
data = pd.read_excel(path, header=[0, 1])
print(data)

# 查看多层索引的列信息
print(data.columns)
# 取出土豆的销量
b = data[('土豆', '销量')]
print(b)
# 取出土豆的销量和毛利
b = data[[('土豆', '销量'), ('土豆', '毛利')]]
print(b)
# 取出土豆的销量和倭瓜的销量
b = data[[('土豆', '销量'), ('倭瓜', '销量')]]
print(b)
# 计算土豆和我挂的销量总和
b = data[('土豆', '销量')] + data[('倭瓜', '销量')]
print(b)
# 汇总土豆和倭瓜的销量和毛利
b = data['土豆'] + data['倭瓜']
print(b)
print(b.columns)
# 创建多层索引
b.columns = pd.MultiIndex.from_product([['总计'], b.columns])
print(b)
# 将汇总数据与原数据横向拼接
data = pd.concat([data, b], axis=1)
print(data)
  • 分箱
# 产生50个10-100之间的成绩
score = np.random.randint(10, 100, 50)
print(score)
# 对分组数据指定范围
xz = [0, 60, 70, 80, 100]
xzname = ['差', '中', '良', '优']
# 对数据进行分组
b = pd.cut(score, xz)
print(b)
# 显示重复值的数量
c = b.value_counts()
print(c)
# 如果上面统计出错,就可以构造一个Series对象来统计
c = pd.Series(b).value_counts()
print(c)
# 用优良中差来表示
b = pd.cut(score, xz, labels=xzname)
print(b.value_counts())

# 等平分箱
# 产生50个10-100之间的成绩
score = np.random.randint(10, 100, 50)
print(score)
# 最大值、最小值
print(score.max())
print(score.min())
# 将箱子平均分成5粉
b = pd.qcut(score, q=4)
print(b.value_counts())
  • describe()
"""
describe()
    count   该列的非NaN的个数
    mean    平均值
    std     标准差
    min     最小值
    25%     1/4分位数
    50%     2/4分位数
    75%     3/4分位数
    max     最大值
其他
    count   统计个数
    sum     求和
    mean    求平均值
    mad     求平均绝对方差
    median  求中位数
    min     最小值
    max     最大值
    argmin  最小值的索引位置
    argmax  最大值的索引位置
    idxmin  最小值的行索引
    idxmax  最大值的行索引
    mode    众数
    abs     绝对值
    prod    乘积    
"""

path = r"C:\work\python\pandas_files\数据统计.xlsx"
data = pd.read_excel(path)
print(data)

# 显示整个表的数值列的描述统计信息
b = data.describe()
print(b)
# 显示语文的描述统计信息
b = data['语文'].describe()
print(b)
# 求语文的最高分
b = data['语文'].max()
print(b)
# 每一列的最大值
b = data.max(numeric_only=True)
print(b)
# 设置索引列
data.set_index('姓名', inplace=True)
print(data)
# 最大值索引位置
b = data['语文'].argmax()
print(b)
# 最大值行索引
c = data['语文'].idxmax()
print(c)
  • 合并
import os
# 合并同一个文件夹中的所有excle文件
path = r"C:\work\python\pandas_files\excel的合并与拆分01\\"
# 创建一个空的表
data = pd.DataFrame()
# 得到文件夹中的所有文件
allfile = os.listdir(path)
# 遍历取出每一个文件
for fname in allfile:
    data1 = pd.read_excel(path+fname) # 读取excel文件
    data = pd.concat([data, data1], axis=0)  # 拼接
data.set_index("日期", inplace=True) # 设置索引
data.to_excel('合并.xlsx')  # 写入文件

# 同一个工作簿的多个Sheet合并
path = r"C:\work\python\pandas_files\excel的合并与拆分03\合并2.xlsx"
# 第二个参数
# sheet_name='Sheet1' 指定读取某一个工作表
# sheet_name=None  读取所有工作表
data = pd.read_excel(path, sheet_name=None)
print(data)
newdata = pd.DataFrame()
for v in data.values():
    newdata = pd.concat([newdata, v])
newdata.set_index("序号", inplace=True)
print(newdata)
newdata.to_excel("a合并.xlsx")
  • 拆分
# 将一个工作表拆分成多个excel文件中
path = r"C:\work\python\pandas_files\excel的合并与拆分03\拆分.xlsx"
data = pd.read_excel(path)
print(data)
# 对部门删除重复值
bmlst = data['部门'].drop_duplicates()
for bm in bmlst:
    b = data[data.部门 == bm]
    b.to_excel("a"+bm+'.xlsx')

# 将一个工作表拆分成同一个excel中的多个工作表
path = r"C:\work\python\pandas_files\excel的合并与拆分03\拆分.xlsx"
data = pd.read_excel(path)
print(data)
# 对部门删除重复值
bmlst = data['部门'].drop_duplicates()
with pd.ExcelWriter('a拆分.xlsx') as ew:
    for bm in bmlst:
        b = data[data.部门 == bm]
        b.to_excel(ew, sheet_name=bm, index=False)