Python数据分析(3):pandas

news2024/10/5 16:30:39

文章目录

  • 二. pandas入门
    • 2.1 数据结构
      • 2.1.1 Series对象
      • 2.1.2 DataFrame对象
    • 2.2 读取数据
      • 2.2.1 读取Excel:read_excel()
          • 1. 读取特定工作簿:sheet_name
          • 2. 指定列标签:header
          • 3. 指定行标签:index_col
          • 4. 读取指定列:usecols
      • 2.2.2 读取csv:read_csv()
    • 2.3 查看数据的行数和列数
      • 2.3.1 查看前几行:head()
      • 2.3.2 查看行数和列数:shape
      • 2.3.3 查看数据的类型:info()、dtype、astype()
    • 2.4 选择数据
      • 2.4.1 选择行:loc()、iloc()
      • 2.4.2 选择列数据:iloc()
      • 2.4.3 同时选择行列数据
    • 2.5 修改行列标签:columns、index、set_index()
  • 三. pandas进阶
    • 3.1 数据的查找和替换
      • 3.1.1 查找:isin()
      • 3.1.2 替换:replace()
    • 3.2 数据的处理
      • 3.2.1 插入:insert()
      • 3.2.2 删除:drop()
      • 3.2.3 处理缺失值:isnulll()、dropna()、fillna()
      • 3.2.4 处理重复值:drop_duplicates()、subset、unique()
      • 3.2.5 排序数据:sort_values()、rank()
      • 3.2.6 筛选数据
    • 3.3 数据表的处理
      • 3.3.1 转置表的行列:T
      • 3.3.2 将表转换成树形结构:stack()
      • 3.3.3 表的拼接:merge()、concat()、append()
    • 3.4 数据的运算
      • 3.4.1 统计运算:sum()、mean()、max()
      • 3.4.2 获取数值分布情况:describe()
      • 3.4.3 计算相关系数:corr()
      • 3.4.4 分组汇总数据:groupby()
      • 3.4.5 创建数据透视表:pivot_table()


前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转:人工智能从入门到精通教程




二. pandas入门

2.1 数据结构

pandas有两个重要的数据结构对象:Series和DataFrame

2.1.1 Series对象

Series是创建一个一维数组对象,会自动生成行标签

import pandas as pd
s = pd.Series(['短裤', '毛衣', '连衣裙', '牛仔裤'])
print(s)
0     短裤
1     毛衣
2    连衣裙
3    牛仔裤
dtype: object

index参数可以指定行标签

import pandas as pd
s1 = pd.Series(['短裤', '毛衣', '连衣裙', '牛仔裤'], index = ['a001', 'a002', 'a003', 'a004']) # 添加行标签
print(s1)
a001     短裤
a002     毛衣
a003    连衣裙
a004    牛仔裤
dtype: object

使用Series对象还可以基于字典创建数据

import pandas as pd
s2 = pd.Series({'a001':'短裤', 'a002':'毛衣', 'a003':'连衣裙', 'a004':'牛仔裤'})
print(s2)
a001     短裤
a002     毛衣
a003    连衣裙
a004    牛仔裤
dtype: object

2.1.2 DataFrame对象

会自动生成行列标签

import pandas as pd
df = pd.DataFrame([['短裤', 45], ['毛衣', 69], ['连衣裙', 119], ['牛仔裤', 99]])
print(df)
     0    1
0   短裤   45
1   毛衣   69
2  连衣裙  119
3  牛仔裤   99

可以columns参数指定列标签;index参数指定行标签

import pandas as pd
df1 = pd.DataFrame([['短裤', 45], ['毛衣', 69], ['连衣裙', 119], ['牛仔裤', 99]], 
                   columns=['产品', '单价'], index=['a001', 'a002', 'a003', 'a004'])
print(df1)
       产品   单价
a001   短裤   45
a002   毛衣   69
a003  连衣裙  119
a004  牛仔裤   99

例:也可以用字典形式生成数据

import pandas as pd
df3 = pd.DataFrame({'产品':['短裤', '毛衣', '连衣裙', '牛仔裤'],'单价':[45, 69, 119, 99]})
print(df3)
    产品   单价
0   短裤   45
1   毛衣   69
2  连衣裙  119
3  牛仔裤   99

例:在用字典生成数据的基础上,同时指定行标签

import pandas as pd
df3 = pd.DataFrame({'产品':['短裤', '毛衣', '连衣裙', '牛仔裤'],'单价':[45, 69, 119, 99]}, index = ['a001', 'a002', 'a003', 'a004'])
print(df3)
       产品   单价
a001   短裤   45
a002   毛衣   69
a003  连衣裙  119
a004  牛仔裤   99

2.2 读取数据

2.2.1 读取Excel:read_excel()

1. 读取特定工作簿:sheet_name

例如对下表的数据进行读取

4月是第四个表,我们应把sheet_name参数指定为3;因为索引是从0开始的。

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data)
   订单编号   产品  数量    金额
0  d001  投影仪  52000
1  d002  马克笔  5300
2  d003  打印机  1298
3  d004  点钞机  1349
4  d005  复印纸  2100
5  d006  条码纸  634

可以看出read_excel()函数自动创建了一个DataFrame对象,同时自动把第一行数据当做列标签。

2. 指定列标签:header

可以看出不给出header参数时,该参数默认为0。

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, header=0)
print(data)
   订单编号   产品  数量    金额
0  d001  投影仪  52000
1  d002  马克笔  5300
2  d003  打印机  1298
3  d004  点钞机  1349
4  d005  复印纸  2100
5  d006  条码纸  634

header=1时结果如下:

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, header=1)
print(data)
   d001  投影仪  52000
0  d002  马克笔  5300
1  d003  打印机  1298
2  d004  点钞机  1349
3  d005  复印纸  2100
4  d006  条码纸  634

header=None时结果如下:

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name = 3, header = None)
print(data)
      0    1   2     3
0  订单编号   产品  数量    金额
1  d001  投影仪  52000
2  d002  马克笔  5300
3  d003  打印机  1298
4  d004  点钞机  1349
5  d005  复印纸  2100
6  d006  条码纸  634
3. 指定行标签:index_col

该参数默认为None

index_col=0时,第0列为列标签

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data)
       产品  数量    金额
订单编号               
d001  投影仪  52000
d002  马克笔  5300
d003  打印机  1298
d004  点钞机  1349
d005  复印纸  2100
d006  条码纸  634

index_col=1时

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=1)
print(data)
     订单编号  数量    金额
产品                 
投影仪  d001  52000
马克笔  d002  5300
打印机  d003  1298
点钞机  d004  1349
复印纸  d005  2100
条码纸  d006  634
4. 读取指定列:usecols

usecols=[2]:指定第二列

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, usecols=[2])
print(data)
   数量
0  51  52  13  14  25  6

指定多列

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, usecols=[1, 3])
print(data)
    产品    金额
0  投影仪  2000
1  马克笔   300
2  打印机   298
3  点钞机   349
4  复印纸   100
5  条码纸    34

2.2.2 读取csv:read_csv()

在这里插入图片描述

import pandas as pd
data = pd.read_csv('订单表.csv')
print(data)
   订单编号   产品  数量    金额
0  d001  投影仪  52000
1  d002  马克笔  5300
2  d003  打印机  1298
3  d004  点钞机  1349
4  d005  复印纸  2100
5  d006  条码纸  634

nrows参数可以指定显示的行数

import pandas as pd
data = pd.read_csv('订单表.csv', nrows=3)  # 显示三行
print(data)
   订单编号   产品  数量    金额
0  d001  投影仪  52000
1  d002  马克笔  5300
2  d003  打印机  1298

2.3 查看数据的行数和列数

2.3.1 查看前几行:head()

head()函数中参数为空默认前5行

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data.head())
   订单编号   产品  数量    金额
0  d001  投影仪  52000
1  d002  马克笔  5300
2  d003  打印机  1298
3  d004  点钞机  1349
4  d005  复印纸  2100

例:指定head(3)时如下

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data.head(3))
   订单编号   产品  数量    金额
0  d001  投影仪  52000
1  d002  马克笔  5300
2  d003  打印机  1298

2.3.2 查看行数和列数:shape

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data)
print(data.shape)
   订单编号   产品  数量    金额
0  d001  投影仪  52000
1  d002  马克笔  5300
2  d003  打印机  1298
3  d004  点钞机  1349
4  d005  复印纸  2100
5  d006  条码纸  634
(6, 4)

2.3.3 查看数据的类型:info()、dtype、astype()

1. info()函数

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name = 3)
print(data.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 4 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   订单编号    6 non-null      object
 1   产品      6 non-null      object
 2   数量      6 non-null      object
 3   金额      6 non-null      int64 
dtypes: int64(1), object(3)
memory usage: 320.0+ bytes
None

2. dtype参数

例:查看特定列的书库类型

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name = 3)
print(data['金额'].dtype)
int64

3. astype()函数

例:特定列的数据类型转换

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name = 3)
data['金额'] = data['金额'].astype('float64')
print(data)
print(data['金额'].dtype)
   订单编号   产品  数量      金额
0  d001  投影仪  52000.0
1  d002  马克笔  5300.0
2  d003  打印机  1298.0
3  d004  点钞机  1349.0
4  d005  复印纸  2100.0
5  d006  条码纸  634.0
float64

2.4 选择数据

2.4.1 选择行:loc()、iloc()

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)  #index_col指定行标签
print(data)
       产品  数量    金额
订单编号               
d001  投影仪  52000
d002  马克笔  5300
d003  打印机  1298
d004  点钞机  1349
d005  复印纸  2100
d006  条码纸  634

1. 挑选单行

loc()函数加行标签指定行

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.loc['d001'])
产品     投影仪
数量      5台
金额    2000
Name: d001, dtype: object

iloc()函数加索引指定行号

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.iloc[2])
产品    打印机
数量     1台
金额    298
Name: d003, dtype: object

2. 挑选多行

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.loc[['d002', 'd004']])
       产品  数量   金额
订单编号              
d002  马克笔  5300
d004  点钞机  1349

iloc()挑选:

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.iloc[[1, 5]])  # 1,5
       产品  数量   金额
订单编号              
d002  马克笔  5300
d006  条码纸  634
       产品  数量   金额

或者给出区间

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.iloc[1:5])  #1-5
       产品  数量   金额
订单编号              
d002  马克笔  5300
d003  打印机  1298
d004  点钞机  1349
d005  复印纸  2100

3. 挑选满足条件的行

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
a = data['金额'] < 300   #挑选金额>300的行
print(data[a])
       产品  数量   金额
订单编号              
d003  打印机  1298
d005  复印纸  2100
d006  条码纸  634

2.4.2 选择列数据:iloc()

1. 挑选单列

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data['产品'])
0    投影仪
1    马克笔
2    打印机
3    点钞机
4    复印纸
5    条码纸
Name: 产品, dtype: object

2. 挑选多列

例:通过列标签挑选多列

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data[['产品', '金额']])
    产品    金额
0  投影仪  2000
1  马克笔   300
2  打印机   298
3  点钞机   349
4  复印纸   100
5  条码纸    34

例:通过索引挑选多列

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data.iloc[:, [1,3]])
    产品    金额
0  投影仪  2000
1  马克笔   300
2  打印机   298
3  点钞机   349
4  复印纸   100
5  条码纸    34

或者写成区间

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data.iloc[:, 1:3])  # 左闭右开
    产品  数量
0  投影仪  51  马克笔  52  打印机  13  点钞机  14  复印纸  25  条码纸  6

2.4.3 同时选择行列数据

例:通过标签挑选

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
data1 = data.loc[['d001', 'd005'], ['产品', '金额']]
print(data1)
       产品    金额
订单编号           
d001  投影仪  2000
d005  复印纸   100

例:通过索引挑选

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
data2 = data.iloc[[2, 4], [0, 2]]
print(data2)
       产品   金额
订单编号          
d003  打印机  298
d005  复印纸  100

2.5 修改行列标签:columns、index、set_index()

先查看一下数据

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data)
   订单编号   产品  数量    金额
0  d001  投影仪  52000
1  d002  马克笔  5300
2  d003  打印机  1298
3  d004  点钞机  1349
4  d005  复印纸  2100
5  d006  条码纸  634

set_index()设置行标签

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data.set_index('订单编号'))  #订单编号那一列为行标签
       产品  数量    金额
订单编号               
d001  投影仪  52000
d002  马克笔  5300
d003  打印机  1298
d004  点钞机  1349
d005  复印纸  2100
d006  条码纸  634

例:字典一对一修改

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
data = data.rename(columns={'订单编号':'编号', '产品':'产品名称', '数量':'订单数量', '金额':'订单金额'}, 
                   index = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E', 5:'F'})
print(data) 
     编号 产品名称 订单数量  订单金额
A  d001  投影仪   52000
B  d002  马克笔   5300
C  d003  打印机   1298
D  d004  点钞机   1349
E  d005  复印纸   2100
F  d006  条码纸   634

columns、index参数分别修改列、行标签

import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
data.columns = ['编号', '产品名称', '订单数量', '订单金额']
data.index = ['A', 'B', 'C', 'D', 'E', 'F']
print(data)
     编号 产品名称 订单数量  订单金额
A  d001  投影仪   52000
B  d002  马克笔   5300
C  d003  打印机   1298
D  d004  点钞机   1349
E  d005  复印纸   2100
F  d006  条码纸   634

三. pandas进阶

3.1 数据的查找和替换

3.1.1 查找:isin()

在这里插入图片描述

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
print(data)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
0  a001   背包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
2  a003   背包        16        65     23    368   1495   1127
3  a004  手提包        36       147     26    936   3822   2886
4  a005   钱包        90       187     78   7020  14586   7566
5  a006  单肩包        58       124     63   3654   7812   4158
6  a007  单肩包        58       124     58   3364   7192   3828

例:isin()函数查看表中是否有该值

data1 = data.isin(['a005','钱包'])   # 查找a005 或 钱包
print(data1)
      编号     产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
0  False  False     False     False  False  False  False  False
1  False   True     False     False  False  False  False  False
2  False  False     False     False  False  False  False  False
3  False  False     False     False  False  False  False  False
4   True   True     False     False  False  False  False  False
5  False  False     False     False  False  False  False  False
6  False  False     False     False  False  False  False  False

例:查看特定列是否有某值

data2 = data['产品'].isin(['手提包'])
print(data2)
0    False
1    False
2    False
3     True
4    False
5    False
6    False
Name: 产品, dtype: bool

3.1.2 替换:replace()

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.replace('背包', '挎包')    #并没有替换
print(data)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
0  a001   背包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
2  a003   背包        16        65     23    368   1495   1127
3  a004  手提包        36       147     26    936   3822   2886
4  a005   钱包        90       187     78   7020  14586   7566
5  a006  单肩包        58       124     63   3654   7812   4158
6  a007  单肩包        58       124     58   3364   7192   3828

可以看出上述代码并没有替换,那怎么替换呢?

1. 一对一替换

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.replace('背包', '挎包', inplace = True)  # 加入inplace=True
print(data)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
0  a001   挎包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
2  a003   挎包        16        65     23    368   1495   1127
3  a004  手提包        36       147     26    936   3822   2886
4  a005   钱包        90       187     78   7020  14586   7566
5  a006  单肩包        58       124     63   3654   7812   4158
6  a007  单肩包        58       124     58   3364   7192   3828

2. 多对一替换

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.replace(['背包', '手提包'], '挎包', inplace = True)
print(data)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
0  a001   挎包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
2  a003   挎包        16        65     23    368   1495   1127
3  a004   挎包        36       147     26    936   3822   2886
4  a005   钱包        90       187     78   7020  14586   7566
5  a006  单肩包        58       124     63   3654   7812   4158
6  a007  单肩包        58       124     58   3364   7192   3828

3. 多对多替换

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.replace({'背包':'挎包', 16:39, 65:88}, inplace = True)
print(data)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
0  a001   挎包        39        88     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
2  a003   挎包        39        88     23    368   1495   1127
3  a004  手提包        36       147     26    936   3822   2886
4  a005   钱包        90       187     78   7020  14586   7566
5  a006  单肩包        58       124     63   3654   7812   4158
6  a007  单肩包        58       124     58   3364   7192   3828

3.2 数据的处理

3.2.1 插入:insert()

例:末尾插入一列

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data['品牌'] = ['AM', 'DE', 'SR', 'AM', 'TY', 'DE', 'UD']
print(data)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()  品牌
0  a001   背包        16        65     60    960   3900   2940  AM
1  a002   钱包        90       187     50   4500   9350   4850  DE
2  a003   背包        16        65     23    368   1495   1127  SR
3  a004  手提包        36       147     26    936   3822   2886  AM
4  a005   钱包        90       187     78   7020  14586   7566  TY
5  a006  单肩包        58       124     63   3654   7812   4158  DE
6  a007  单肩包        58       124     58   3364   7192   3828  UD

例:指定插入到哪列

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.insert(2, '品牌', ['AM', 'DE', 'SR', 'AM', 'TY', 'DE', 'UD'])
print(data)
     编号   产品  品牌  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
0  a001   背包  AM        16        65     60    960   3900   2940
1  a002   钱包  DE        90       187     50   4500   9350   4850
2  a003   背包  SR        16        65     23    368   1495   1127
3  a004  手提包  AM        36       147     26    936   3822   2886
4  a005   钱包  TY        90       187     78   7020  14586   7566
5  a006  单肩包  DE        58       124     63   3654   7812   4158
6  a007  单肩包  UD        58       124     58   3364   7192   3828

3.2.2 删除:drop()

axis参数可以指定删除行还是删除列

1. 删除列

例:指定标签删除

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.drop(['成本价(元/个)', '成本(元)'], axis = 1)
print(a)
     编号   产品  销售价(/)  数量()  收入()  利润()
0  a001   背包        65     60   3900   2940
1  a002   钱包       187     50   9350   4850
2  a003   背包        65     23   1495   1127
3  a004  手提包       147     26   3822   2886
4  a005   钱包       187     78  14586   7566
5  a006  单肩包       124     63   7812   4158
6  a007  单肩包       124     58   7192   3828

例:指定索引删除

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
b = data.drop(data.columns[[2, 5]], axis = 1)
print(b)
     编号   产品  销售价(/)  数量()  收入()  利润()
0  a001   背包        65     60   3900   2940
1  a002   钱包       187     50   9350   4850
2  a003   背包        65     23   1495   1127
3  a004  手提包       147     26   3822   2886
4  a005   钱包       187     78  14586   7566
5  a006  单肩包       124     63   7812   4158
6  a007  单肩包       124     58   7192   3828

方法三

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
c = data.drop(columns = ['成本价(元/个)', '成本(元)'])
print(c)
     编号   产品  销售价(/)  数量()  收入()  利润()
0  a001   背包        65     60   3900   2940
1  a002   钱包       187     50   9350   4850
2  a003   背包        65     23   1495   1127
3  a004  手提包       147     26   3822   2886
4  a005   钱包       187     78  14586   7566
5  a006  单肩包       124     63   7812   4158
6  a007  单肩包       124     58   7192   3828

2. 删除行

例:指定行标签删除

import pandas as pd
data = pd.read_excel('产品统计表.xlsx', index_col = 0)
a = data.drop(['a001', 'a004'], axis = 0)
print(a)
       产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
编号                                                       
a002   钱包        90       187     50   4500   9350   4850
a003   背包        16        65     23    368   1495   1127
a005   钱包        90       187     78   7020  14586   7566
a006  单肩包        58       124     63   3654   7812   4158
a007  单肩包        58       124     58   3364   7192   3828

例:指定索引删除

import pandas as pd
data = pd.read_excel('产品统计表.xlsx', index_col = 0)
b = data.drop(data.index[[0, 4]], axis = 0)
print(b)
       产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
编号                                                       
a002   钱包        90       187     50   4500   9350   4850
a003   背包        16        65     23    368   1495   1127
a004  手提包        36       147     26    936   3822   2886
a006  单肩包        58       124     63   3654   7812   4158
a007  单肩包        58       124     58   3364   7192   3828

方法三:

import pandas as pd
data = pd.read_excel('产品统计表.xlsx', index_col = 0)
c = data.drop(index = ['a001', 'a004'])
print(c)
       产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
编号                                                       
a002   钱包        90       187     50   4500   9350   4850
a003   背包        16        65     23    368   1495   1127
a005   钱包        90       187     78   7020  14586   7566
a006  单肩包        58       124     63   3654   7812   4158
a007  单肩包        58       124     58   3364   7192   3828

3.2.3 处理缺失值:isnulll()、dropna()、fillna()

import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
print(data)
     编号   产品  成本价(/)  销售价(/)  数量()   成本()  收入()  利润()
0  a001   背包      16.0        65     60   960.0   3900   2940
1  a002   钱包      90.0       187     50  4500.0   9350   4850
2  a003   背包       NaN        65     23   368.0   1495   1127
3  a004  手提包      36.0       147     26   936.0   3822   2886
4  a005   钱包      90.0       187     78  7020.0  14586   7566
5  a006  单肩包      58.0       124     63  3654.0   7812   4158
6  a007  单肩包      58.0       124     58     NaN   7192   3828

info()函数查看数据类型,还可以查看是否有缺失值

import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7 entries, 0 to 6
Data columns (total 8 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   编号        7 non-null      object 
 1   产品        7 non-null      object 
 2   成本价(/)  6 non-null      float64
 3   销售价(/)  7 non-null      int64  
 4   数量()     7 non-null      int64  
 5   成本()     6 non-null      float64
 6   收入()     7 non-null      int64  
 7   利润()     7 non-null      int64  
dtypes: float64(2), int64(4), object(2)
memory usage: 576.0+ bytes

1. 查看缺失值:isnull()

isnull()函数查看是否有缺失值;在numpy模块中用isnan()函数

import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
a = data.isnull()
print(a)
      编号     产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
0  False  False     False     False  False  False  False  False
1  False  False     False     False  False  False  False  False
2  False  False      True     False  False  False  False  False
3  False  False     False     False  False  False  False  False
4  False  False     False     False  False  False  False  False
5  False  False     False     False  False  False  False  False
6  False  False     False     False  False   True  False  False

2. 删除缺失值:dropna()

例:删除有缺失值的行

import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
b = data.dropna()
print(b)
     编号   产品  成本价(/)  销售价(/)  数量()   成本()  收入()  利润()
0  a001   背包      16.0        65     60   960.0   3900   2940
1  a002   钱包      90.0       187     50  4500.0   9350   4850
3  a004  手提包      36.0       147     26   936.0   3822   2886
4  a005   钱包      90.0       187     78  7020.0  14586   7566
5  a006  单肩包      58.0       124     63  3654.0   7812   4158

例:删除整行都为缺失值的行,需要指定how参数

import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
c = data.dropna(how = 'all')
print(c)
     编号   产品  成本价(/)  销售价(/)  数量()   成本()  收入()  利润()
0  a001   背包      16.0        65     60   960.0   3900   2940
1  a002   钱包      90.0       187     50  4500.0   9350   4850
2  a003   背包       NaN        65     23   368.0   1495   1127
3  a004  手提包      36.0       147     26   936.0   3822   2886
4  a005   钱包      90.0       187     78  7020.0  14586   7566
5  a006  单肩包      58.0       124     63  3654.0   7812   4158
6  a007  单肩包      58.0       124     58     NaN   7192   3828

3. 缺失值的填充:fillna()

import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
d = data.fillna(0)   # 缺失值全部填充为0
print(d)
     编号   产品  成本价(/)  销售价(/)  数量()   成本()  收入()  利润()
0  a001   背包      16.0        65     60   960.0   3900   2940
1  a002   钱包      90.0       187     50  4500.0   9350   4850
2  a003   背包       0.0        65     23   368.0   1495   1127
3  a004  手提包      36.0       147     26   936.0   3822   2886
4  a005   钱包      90.0       187     78  7020.0  14586   7566
5  a006  单肩包      58.0       124     63  3654.0   7812   4158
6  a007  单肩包      58.0       124     58     0.0   7192   3828

例:不同列的缺失值设置不同的填充值

import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
e = data.fillna({'成本价(元/个)':16, '成本(元)':3364})
print(e)
     编号   产品  成本价(/)  销售价(/)  数量()   成本()  收入()  利润()
0  a001   背包      16.0        65     60   960.0   3900   2940
1  a002   钱包      90.0       187     50  4500.0   9350   4850
2  a003   背包      16.0        65     23   368.0   1495   1127
3  a004  手提包      36.0       147     26   936.0   3822   2886
4  a005   钱包      90.0       187     78  7020.0  14586   7566
5  a006  单肩包      58.0       124     63  3654.0   7812   4158
6  a007  单肩包      58.0       124     58  3364.0   7192   3828

3.2.4 处理重复值:drop_duplicates()、subset、unique()

     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
0  a001   背包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
2  a003   背包        16        65     23    368   1495   1127
3  a004  手提包        36       147     26    936   3822   2886
4  a004  手提包        36       147     26    936   3822   2886   # 重复
5  a005   钱包        90       187     78   7020  14586   7566
6  a006  单肩包        58       124     63   3654   7812   4158

1. 删除重复行:drop_duplicates()

a = data.drop_duplicates()
print(a)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
0  a001   背包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
2  a003   背包        16        65     23    368   1495   1127
3  a004  手提包        36       147     26    936   3822   2886
5  a005   钱包        90       187     78   7020  14586   7566
6  a006  单肩包        58       124     63   3654   7812   4158

2. 删除某一列的重复值:subset

默认保留第一个重复值所在的行,删除其他重复值所在的行

b = data.drop_duplicates(subset = '产品')
print(b)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
0  a001   背包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
3  a004  手提包        36       147     26    936   3822   2886
6  a006  单肩包        58       124     63   3654   7812   4158

保留第一个重复值所在的行

c = data.drop_duplicates(subset = '产品', keep = 'first')
print(c)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
0  a001   背包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
3  a004  手提包        36       147     26    936   3822   2886
6  a006  单肩包        58       124     63   3654   7812   4158

保留最后一个重复值所在的行

d = data.drop_duplicates(subset = '产品', keep = 'last')
print(d)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
2  a003   背包        16        65     23    368   1495   1127
4  a004  手提包        36       147     26    936   3822   2886
5  a005   钱包        90       187     78   7020  14586   7566
6  a006  单肩包        58       124     63   3654   7812   4158

是重复的就删除

e = data.drop_duplicates(subset = '产品', keep = False)
print(e)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
6  a006  单肩包        58       124     63   3654   7812   4158

3. 获取唯一值:unique()

f = data['产品'].unique()
print(f)
['背包' '钱包' '手提包' '单肩包']

3.2.5 排序数据:sort_values()、rank()

1. sort_values()

import pandas as pd
data = pd.read_excel('产品统计表2.xlsx')
a = data.sort_values(by = '数量(个)', ascending = True) #第一个参数指定列  第二个参数指定升序
print(a)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
2  a003   背包        16        65     23    368   1495   1127
3  a004  手提包        36       147     26    936   3822   2886
4  a004  手提包        36       147     26    936   3822   2886
1  a002   钱包        90       187     50   4500   9350   4850
0  a001   背包        16        65     60    960   3900   2940
6  a006  单肩包        58       124     63   3654   7812   4158
5  a005   钱包        90       187     78   7020  14586   7566

例:降序如下

b = data.sort_values(by = '数量(个)', ascending = False)
print(b)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
5  a005   钱包        90       187     78   7020  14586   7566
6  a006  单肩包        58       124     63   3654   7812   4158
0  a001   背包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
3  a004  手提包        36       147     26    936   3822   2886
4  a004  手提包        36       147     26    936   3822   2886
2  a003   背包        16        65     23    368   1495   1127

2. rank()

c = data['利润(元)'].rank(method = 'average', ascending = False)  #指定利润降序排序  有重复值则返回重复值的平均排名
print(c)
0    4.0
1    2.0
2    7.0
3    5.5
4    5.5
5    1.0
6    3.0
Name: 利润(元), dtype: float64

参数指定first时,表示在数据有重复值时,越先出现的数据排名越靠前

d = data['利润(元)'].rank(method = 'first', ascending = False)
print(d)
0    4.0
1    2.0
2    7.0
3    5.0
4    6.0
5    1.0
6    3.0
Name: 利润(), dtype: float64

3.2.6 筛选数据

获取产品为单肩包的行数据

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data[data['产品'] == '单肩包']   #获取产品为单肩包的行数据
print(a)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
5  a006  单肩包        58       124     63   3654   7812   4158
6  a007  单肩包        58       124     58   3364   7192   3828

获取数量>60的行数据

b = data[data['数量(个)'] > 60]  # 获取数量>60的行数据
print(b)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
4  a005   钱包        90       187     78   7020  14586   7566
5  a006  单肩包        58       124     63   3654   7812   4158

获取产品为单肩包 且 数量>60 的行数据

c = data[(data['产品'] == '单肩包') & (data['数量(个)'] > 60)]
print(c)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
5  a006  单肩包        58       124     63   3654   7812   4158

获取产品为单肩包 或 数量>60 的行数据

d = data[(data['产品'] == '单肩包') | (data['数量(个)'] > 60)]
print(d)
     编号   产品  成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
4  a005   钱包        90       187     78   7020  14586   7566
5  a006  单肩包        58       124     63   3654   7812   4158
6  a007  单肩包        58       124     58   3364   7192   3828

3.3 数据表的处理

3.3.1 转置表的行列:T

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.T
print(a)
             0     1     2     3      4     5     6
编号        a001  a002  a003  a004   a005  a006  a007
产品          背包    钱包    背包   手提包     钱包   单肩包   单肩包
成本价(/)    16    90    16    36     90    58    58
销售价(/)    65   187    65   147    187   124   124
数量()       60    50    23    26     78    63    58
成本()      960  4500   368   936   7020  3654  3364
收入()     3900  9350  1495  3822  14586  7812  7192
利润()     2940  4850  1127  2886   7566  4158  3828

3.3.2 将表转换成树形结构:stack()

     编号   产品  销售价(/)  数量()  收入()
0  a001   背包        65     60   3900
1  a002   钱包       187     50   9350
2  a003  单肩包       124     58   7192

例:stack()函数转换成树形结构

a = data.stack()
print(a)
0  编号          a001
   产品            背包
   销售价(/)      65
   数量()         60
   收入()       3900
1  编号          a002
   产品            钱包
   销售价(/)     187
   数量()         50
   收入()       9350
2  编号          a003
   产品           单肩包
   销售价(/)     124
   数量()         58
   收入()       7192
dtype: object

3.3.3 表的拼接:merge()、concat()、append()

import pandas as pd
data1 = pd.read_excel('产品表.xlsx', sheet_name = 0)  #第0张工作簿
data2 = pd.read_excel('产品表.xlsx',sheet_name = 1)   #第1张工作簿
print(data1)
print(data2)
   员工编号 员工姓名 员工性别
0  a001   张三    男
1  a002   李四    女
2  a003   王五    男
3  a004   赵六    男
   员工编号 员工姓名    销售业绩
0  a001   张三  360000
1  a002   李四  458000
2  a003   王五  369000
3  a004   赵六  450000
4  a005   钱七  500000

1. merge()

a = pd.merge(data1, data2)  #行取交集  列取并集
print(a)
   员工编号 员工姓名 员工性别    销售业绩
0  a001   张三    男  360000
1  a002   李四    女  458000
2  a003   王五    男  369000
3  a004   赵六    男  450000

how参数指定外连接

b = pd.merge(data1, data2, how = 'outer')    #行取并集  列取并集
print(b)
   员工编号 员工姓名 员工性别    销售业绩
0  a001   张三    男  360000
1  a002   李四    女  458000
2  a003   王五    男  369000
3  a004   赵六    男  450000
4  a005   钱七  NaN  500000

on参数指定按哪一列合并

c = pd.merge(data1, data2, on = '员工姓名')
print(c)
  员工编号_x 员工姓名 员工性别 员工编号_y    销售业绩
0   a001   张三    男   a001  360000
1   a002   李四    女   a002  458000
2   a003   王五    男   a003  369000
3   a004   赵六    男   a004  450000

2. concat()

concat()函数采用全连接的方式,没有的数设置为缺失值

d = pd.concat([data1, data2])
print(d)
   员工编号 员工姓名 员工性别      销售业绩
0  a001   张三    男       NaN
1  a002   李四    女       NaN
2  a003   王五    男       NaN
3  a004   赵六    男       NaN
0  a001   张三  NaN  360000.0
1  a002   李四  NaN  458000.0
2  a003   王五  NaN  369000.0
3  a004   赵六  NaN  450000.0
4  a005   钱七  NaN  500000.0

重置行标签

e = pd.concat([data1, data2], ignore_index = True)  #重置行标签
print(e)
   员工编号 员工姓名 员工性别      销售业绩
0  a001   张三    男       NaN
1  a002   李四    女       NaN
2  a003   王五    男       NaN
3  a004   赵六    男       NaN
4  a001   张三  NaN  360000.0
5  a002   李四  NaN  458000.0
6  a003   王五  NaN  369000.0
7  a004   赵六  NaN  450000.0
8  a005   钱七  NaN  500000.0

3. append()

效果与concat()全连接一样

f = data1.append(data2)
print(f)
   员工编号 员工姓名 员工性别      销售业绩
0  a001   张三    男       NaN
1  a002   李四    女       NaN
2  a003   王五    男       NaN
3  a004   赵六    男       NaN
0  a001   张三  NaN  360000.0
1  a002   李四  NaN  458000.0
2  a003   王五  NaN  369000.0
3  a004   赵六  NaN  450000.0
4  a005   钱七  NaN  500000.0

末尾添加行元素

g = data1.append({'员工编号':'a005', '员工姓名':'孙七', '员工性别':'男'}, ignore_index = True)
print(g)
   员工编号 员工姓名 员工性别
0  a001   张三    男
1  a002   李四    女
2  a003   王五    男
3  a004   赵六    男
4  a005   孙七    男

3.4 数据的运算

3.4.1 统计运算:sum()、mean()、max()

1. 求和:sum()

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.sum()  # 每一列求和
print(a)
编号          a001a002a003a004a005a006a007
产品                     背包钱包背包手提包钱包单肩包单肩包
成本价(/)                             364
销售价(/)                             899
数量()                                358
成本()                              20802
收入()                              48157
利润()                              27355
dtype: object

例:指定列求和

b = data['利润(元)'].sum()
print(b)
27355

2. 求平均值:mean()

c = data.mean() #每一列求平均值
print(c)
成本价(/)      52.000000
销售价(/)     128.428571
数量()         51.142857
成本()       2971.714286
收入()       6879.571429
利润()       3907.857143
dtype: float64

例:指定列求均值

d = data['利润(元)'].mean()
print(d)
3907.8571428571427

3. 求最值:max()

e = data.max()
print(e)
编号           a007
产品             钱包
成本价(/)       90
销售价(/)      187
数量()          78
成本()        7020
收入()       14586
利润()        7566
dtype: object

例:指定列求最值

f = data['利润(元)'].max()
print(f)
7566

3.4.2 获取数值分布情况:describe()

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.describe()
print(a)
        成本价(/)    销售价(/)      数量()        成本()         收入()        利润()
count   7.000000    7.000000   7.000000     7.000000      7.000000     7.000000
mean   52.000000  128.428571  51.142857  2971.714286   6879.571429  3907.857143
std    31.112698   50.483849  20.053500  2391.447659   4352.763331  2002.194498
min    16.000000   65.000000  23.000000   368.000000   1495.000000  1127.000000
25%    26.000000   94.500000  38.000000   948.000000   3861.000000  2913.000000
50%    58.000000  124.000000  58.000000  3364.000000   7192.000000  3828.000000
75%    74.000000  167.000000  61.500000  4077.000000   8581.000000  4504.000000
max    90.000000  187.000000  78.000000  7020.000000  14586.000000  7566.000000

例:获取单列的情况

b = data['利润(元)'].describe()
print(b)
count       7.000000
mean     3907.857143
std      2002.194498
min      1127.000000
25%      2913.000000
50%      3828.000000
75%      4504.000000
max      7566.000000
Name: 利润(), dtype: float64

3.4.3 计算相关系数:corr()

import pandas as pd
data = pd.read_excel('相关性分析.xlsx')
print(data)
   代理商编号  年销售额(万元)  年广告费投入额(万元)  成本费用(万元)  管理费用(万元)
0  A-001      20.5         15.6      2.00      0.80
1  A-003      24.5         16.7      2.54      0.94
2  B-002      31.8         20.4      2.96      0.88
3  B-006      34.9         22.6      3.02      0.79
4  B-008      39.4         25.7      3.14      0.84
5  C-003      44.5         28.8      4.00      0.80
6  C-004      49.6         32.1      6.84      0.85
7  C-007      54.8         35.9      5.60      0.91
8  D-006      58.5         38.7      6.45      0.90

corr()函数获取相关系数

a = data.corr()
print(a)
             年销售额(万元)  年广告费投入额(万元)  成本费用(万元)  管理费用(万元)
年销售额(万元)     1.000000     0.996275  0.914428  0.218317
年广告费投入额(万元)  0.996275     1.000000  0.918404  0.223187
成本费用(万元)     0.914428     0.918404  1.000000  0.284286
管理费用(万元)     0.218317     0.223187  0.284286  1.000000

例:获取指定列与其他列的相关系数

b = data.corr()['年销售额(万元)']
print(b)
年销售额(万元)       1.000000
年广告费投入额(万元)    0.996275
成本费用(万元)       0.914428
管理费用(万元)       0.218317
Name: 年销售额(万元), dtype: float64

3.4.4 分组汇总数据:groupby()

在这里插入图片描述

import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.groupby('产品')    #根据产品列分组
print(a)
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x00000213943E4640>

groupby()函数返回的是一个DataFrameBy对象,该对象包含分组后的数据,但是不能直观地显示出来。

b = data.groupby('产品').sum()
print(b)
     成本价(/)  销售价(/)  数量()  成本()  收入()  利润()
产品                                                 
单肩包       116       248    121   7018  15004   7986
手提包        36       147     26    936   3822   2886
背包         32       130     83   1328   5395   4067
钱包        180       374    128  11520  23936  12416

分组后获取指定列的汇总情况

c = data.groupby('产品')['利润(元)'].sum()
print(c)
产品
单肩包     7986
手提包     2886
背包      4067
钱包     12416
Name: 利润(), dtype: int64

获取多列的汇总情况

d = data.groupby('产品')['数量(个)', '利润(元)'].sum()
print(d)
     数量()  利润()
产品               
单肩包    121   7986
手提包     26   2886
背包      83   4067
钱包     128  12416

3.4.5 创建数据透视表:pivot_table()

  • values参数用于指定要计算的列
  • index参数用于指定一个列作为数据透视表的行标签
  • aggfunc参数用于指定参数values的计算类型
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = pd.pivot_table(data, values = '利润(元)', index = '产品', aggfunc = 'sum')  #data.groupby('产品')['利润(元)'].sum()  同样功能
print(a)
     利润()
产品        
单肩包   7986
手提包   2886
背包    4067
钱包   12416

获取多列的情况

b = pd.pivot_table(data, values = ['利润(元)', '成本(元)'], index = '产品', aggfunc = 'sum')
print(b)
     利润()  成本()
产品               
单肩包   7986   7018
手提包   2886    936
背包    4067   1328
钱包   12416  11520

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TypeScript接口——interface

目录 一、接口概述&#xff1a; 二、接口类型介绍&#xff1a; 1、属性接口&#xff1a; 2、 函数接口&#xff1a; 3、可索引接口&#xff1a; &#xff08;1&#xff09;可索引接口约束数组示例&#xff1a; &#xff08;2&#xff09; 可索引接口约束对象示例&#xf…

【Python】numpy矩阵运算大全

文章目录前言0 遇事不决&#xff0c;先查官网&#xff0c;查着查着就查熟了1 矩阵运算及其必要性2 矩阵的创建2.1 普通矩阵2.2 特殊矩阵3 矩阵的索引3.1 str, list, tupple的索引3.2 numpy索引4 矩阵的运算4.1 通用函数与广播机制4.3 矩阵乘法4.4 矩阵求逆4.5 矩阵转置4.6 向量…

SpringBoot整合mybatis-plus 实现增删改查和分页查询

SpringBoot整合mybatis-plus 实现增删改查和分页查询整体的运行图片&#xff1a;一、环境搭建&#xff1a;1、依赖2、application.yml文件3、数据库二、实体类&#xff1a;三、数据层开发——基础CRUD四、业务层开发——分页功能制作4.1分页配置类 configuration4.2service接口…

【Node.js】模块化学习

Node.js教学 专栏 从头开始学习 目录 模块化的基本概念 什么是模块化 现实中的模块化 编程领域中的模块化 模块化规范 Node.js中的模块化 Node.js中模块的分类 加载模块 Node.js中的模块作用域 什么是模块作用域 模块作用域好处 向外共享模块作用域中的成员 module对象 modu…

第二站:分支与循环(终幕)一些经典的题目

目录 一、计算n的阶乘 1.一般解法 2.优化不能表示出较大数的阶乘 二、 计算 1!2!3!……10! 1.循环嵌套解法 2.一次循环解法(优化计算时间) 三、在一个有序数组中查找具体的某个数字n 1.遍历查找 2.二分查找算法&#xff08;优化了查找时间&#xff09; 四、编写代码&am…

IDEA Out of memory 问题

文章目录1. 前提2. 问题记录与解决方案1. 前提 阅读本文之前&#xff0c;读者要首先把 Out of memory 这个问题的解决方案多搜几个帖子&#xff0c;先按照其他帖子的解决方案&#xff08;修改配置文件Xmx属性等&#xff09;尝试一遍&#xff0c;不能解决再参考本文。 本文所描…

前端小游戏——植物大战僵尸

给大家分享一个植物大战僵尸网页游戏源代码&#xff0c;感兴趣的小伙伴可收藏学习 &#x1f449;完整源码 文章目录⌛️效果展示⌛️游戏介绍⌛️游戏内容&#xff08;1&#xff09;冒险模式&#xff08;2&#xff09;小游戏⌛️图片资源⌛️代码展示&#xff08;1&#xff09;…

【黑猩猩算法】基于加权反对技术和贪婪搜索进化黑猩猩优化算法求解多模态工程问题附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

终于拿到了阿里P8架构师分享的JCF和JUC源码分析与实现笔记java岗

时代的一粒尘&#xff0c;落在每个人身上&#xff0c;就是一座山”。 时代更迭变换&#xff0c;我们好像都知道今天与昨天不同&#xff0c;又好像肉眼看不出哪里不同。 但其实它就正在以各种各样的方式体现在每一个普通人身上。 疫情爆发三个月的时间&#xff0c;截止2020年…

~外中断~

目录 一、接口芯片和端口 二、外中断信息 三、PC机键盘的处理过程 一、接口芯片和端口 外设的输出不直接送入内存和CPU&#xff0c;而是送入相关的接口芯片的端口中&#xff1b;CPU向外设的输出也不是直接送入外设&#xff0c;而是先送入端口&#xff0c;再由相关的芯片送到…

C语言程序设计--火车订票系统

任务要求: 创建一个火车票管理系统&#xff0c;功能包括&#xff1a; &#xff08;1&#xff09;录入班次信息(信息用文件保存),可不定时地增加班次数据 &#xff08;2&#xff09;浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班 次的发车时间,则…

js中map()的使用详解

引入&#xff1a; 有网友有如下困惑&#xff1a; map是数组的方法&#xff0c;有一个参数&#xff0c;参数是一个函数&#xff0c;函数中有3个参数 参数1&#xff1a;item必须。当前元素的值 参数2&#xff1a;index&#xff0c;可选。当前元素在数组中的索引值 参数3&#xff…

CentOS 7迁移Anolis OS 7 ——筑梦之路

迁移注意事项 Anolis OS 7生态上和依赖管理上保持跟CentOS7.x兼容&#xff0c;一键式迁移脚本centos2anolis.py&#xff0c;实现CentOS7.x到Anolis OS 7的平滑迁移。 使用迁移脚本前需要注意如下事项&#xff1a; 迁移涉及到软件包的重新安装&#xff0c;是不可逆过程&#…

BBR/CUBIC 共存时的 buffer 挤兑

BBR 与 CUBIC 共存时的收敛图&#xff0c;理论情况&#xff1a; 理论上 BBR 不会挤占 buffer&#xff0c;inflight 保持为恒定的 BDP。 但 BBR 的 inflight 做不到恒定&#xff0c;多流共存时&#xff0c;依然会 “主动占用 buffer” 而相互挤兑带宽&#xff0c;而该行为是必须…

java - 序列化

钱应该怎么花 前几天看到一个新闻&#xff0c;一女子打拼了5年攒了30万买房钱&#xff0c;最后因为意外被一场突如其来的大火烧了&#xff0c;经过多家银行&#xff0c;长达4小时的鉴定&#xff0c;挽回了15万损失。 还看到一个新闻&#xff0c;老人攒5000元钱遭虫蛀烂&#…

「Linux」400行纯C语言代码带你「手撕线程池」

线程池的基本概念 不管线程池是什么东西&#xff01;但是我们必须知道线程池被搞出来的目的就是&#xff1a;提高程序执行效率而设计出来的&#xff1b; 了解了线程池的目的后&#xff1a;我们就可以开始理解线程池&#xff1a; 首先回答一个问题&#xff1a;为什么会有线程…

python文件的读取

python文件的读取1.文件的读取1.read() 读取整个文件2.readline() 每次读取一行文件3. readlines() 读取文件的所有行2.文件的写入1.以"x"方式打开文件2.以"a"方式打开文件3.以"w"方式打开文件3.文件的删除4.Excel表数据的读取1.直接读取2.通过p…

SQL Server2019配置always on高可用图文步骤

准备工作 首先需要准备好Windows Server上的故障转移群集&#xff0c;步骤可以参考上一篇。 https://blog.csdn.net/u012869793/article/details/127560270?spm1001.2014.3001.5501 然后服务器上安装好SqlServer&#xff0c;我这里安装的是2019。 正文 勾选启用Always ON可…

牛客竞赛每日俩题 - Day7

目录 经典01背包问题 二叉树遍历与构造&#xff08;考研重点&#xff09; 经典01背包问题 求正数数组的最小不可组成和_百度笔试题_牛客网 参考大佬题解&#xff1a; 动态规划&#xff1a;01背包问题(无物品价值)&#xff0c;思想相同&#xff0c;题目最终要求有些变化 min为…