Backend - 数据分析 Pandas

目录

一、作用

二、基础环境

(一)执行虚拟环境的终端命令

 (二)代码中导包

三、应用:一维数组

(一)Series对象

1. 含义

2. 常用属性和方法

(1)属性

(2)方法

(二)创建一维数组

1. 使用Series(序列)对象,索引默认从0开始

2. Series可用index指定索引

3. Series搭配字典指定索引

4. 筛选数据

(三)取一位数组的值

1. 按索引取值

2. 按位置取值

(四)计算向量值

1. 根据索引来计算,而不是位置对应

2. 计算不存在的列,则得空值NaN

(五)处理空值

1. dropna 删除空值 

2. 填充空值

(1)fillna 填充空值

(2)add的fill_value属性

(六)获取基本统计值

四、应用:二维数组

(一)DataFrame 对象

1. 含义

2. 常用属性和方法

(1)属性

(2)方法

(二)建立二维数组

1. 使用DataFrame(数据框)

2. 数据类型可不一致

(三) 获取二维数组的值

1. 按索引取值

2. 按位置取值

3. 按列名取值

(四)二维数组的数据处理

 1. 列操作

(1)重命名列名

(2)添加新列

 2. 行操作

(1)删除指定行

 3. 索引操作

(1)重置索引

(2)修改索引

4. 处理空值

(1)判断空值

(2)填充空值

(3)删除空值

 5. 转换数值类型

(1)转成float64格式

(2)转成时间格式

6. 数据排序

7.  去重

(五)常用函数

1. 运用

2. 常用

(1)mean( )

(2)groupby( )

五、分析xls文件

(一)基础环境

(二)查看文件数据

(三)处理文件数据


一、作用

        数据整理分析库、基于Numpy。

二、基础环境

(一)执行虚拟环境的终端命令

pip install pandas

 (二)代码中导包

import pandas as pd

三、应用:一维数组

(一)Series对象

1. 含义

        Series 适用于一维数组。利用列表、字典等对象,创建带有标签(索引)的一维数组。

2. 常用属性和方法

(1)属性
se = pd.Series(['数据结构', '数据库原理', '计算机', '操作系统'])
print(se.size) # 返回元素总个数 4
print(se.shape) # 返回行数&列数 (4,)
print(se.index) # 返回行索引 RangeIndex(start=0, stop=4, step=1)
print(se.index.tolist()) # 返回列表形式的行索引 [0, 1, 2, 3]
print(se.axes) # [RangeIndex(start=0, stop=4, step=1)]
(2)方法
print(se.head(2)) # 前几行数据,默认前5行
print(se.tail(2)) # 后几行数据,默认后5行
print(se.describe()) # 描述统计信息,包括计算总数、唯一值个数、出现最高频率等

(二)创建一维数组

1. 使用Series(序列)对象,索引默认从0开始

a = ['数据结构', '数据库原理', '计算机', '操作系统']
b = pd.Series(a)

2. Series可用index指定索引

a = ['数据结构', '数据库原理', '计算机', '操作系统']
b = pd.Series(a, index=['索引1', '索引2', '索引3', '索引4'])
print(b)

3. Series搭配字典指定索引

test_dict = {'索引1': '数据结构', '索引2': '数据库原理', '索引3': '计算机', '索引4': '操作系统'}
b = pd.Series(test_dict)
print(b)

4. 筛选数据

test_dict = {'索引1': '数据结构', '索引2': '数据库原理', '索引3': '计算机', '索引4': '操作系统'}
b = pd.Series(test_dict, index=['索引1', '索引9'])
print(b)

结果是:

索引1    数据结构
索引9     NaN
dtype: object

如果想要去除index对应为NaN的数据,则搭配dropna。

test_dict = {'索引1': '数据结构', '索引2': '数据库原理', '索引3': '计算机', '索引4': '操作系统'}
b = pd.Series(test_dict, index=['索引1', '索引9'])
print(b)

结果是: 

索引1    数据结构
dtype: object

(三)取一位数组的值

iloc:第几行为索引,loc:标签为索引。

1. 按索引取值

a = ['数据结构', '数据库原理', '操作系统', '计算机组成原理']
b = pd.Series(a, index=[31,32,33,34])
c = b[31]  # 数据结构
c2 = b.loc[31]  # 数据结构

2. 按位置取值

a = ['数据结构', '数据库原理', '操作系统', '计算机组成原理']
b = pd.Series(a, index=[31,32,33,34])
c = b[31]  # 数据结构
c2 = b.iloc[0]  # 数据结构

(四)计算向量值

1. 根据索引来计算,而不是位置对应

a =  pd.Series([100, 200, 300, 400], index=[31,32,33,34])
b =  pd.Series([1,2,3,4], index=[32,31,34,33])
c = a+b
print(c) 

结果是:

31    102
32    201
33    304
34    403
dtype: int64
# 其中,索引31对应的值是102,而不是101

2. 计算不存在的列,则得空值NaN

a =  pd.Series([100, 200, 300, 400], index=[31,32,33,34])
b =  pd.Series([1,2,3,4], index=[30,32,33,34])
c = a+b
# c = a.add(b)
print(c)

结果是:

30      NaN
31      NaN
32    202.0
33    304.0
34    403.0

(五)处理空值

1. dropna 删除空值 

a = pd.Series([100, 200, 300, 400], index=[31,32,33,34])
b = pd.Series([1,2,3,4], index=[30,32,33,34])
c = a+b
# c = a.add(b)
d = c.dropna()
print(d)

结果是:

32    202.0
33    304.0
34    403.0

2. 填充空值

(1)fillna 填充空值
a = pd.Series([100, 200, 300, 400], index=[31,32,33,34])
b = pd.Series([1,2,3,4], index=[30,32,33,34])
c = a+b
d=c.fillna('空值')
print(d)

结果是:

30       空值
31       空值
32      202.0
33      303.0
34      404.0
dtype: object
(2)add的fill_value属性
a = pd.Series([100, 200, 300, 400], index=[31,32,33,34])
b = pd.Series([1,2,3,4], index=[30,32,33,34])
c = a.add(b, fill_value=0)
print(c)

结果是:

30      1.0
31    100.0
32    202.0
33    303.0
34    404.0

(六)获取基本统计值

a = [1,2,3,4,5]
b = pd.Series(a, index=['第1位数', '第2位数', '第3位数', '第4位数', '第5位数'])
c = b.describe()

四、应用:二维数组

(一)DataFrame 对象

1. 含义

        DataFrame适用于二维数组。可以从二维数组、字典、CSV文件等,创建二维表格。

其他知识点:
        NA:not available 不可用
        NaN:not a number
        NAT:not a time

2. 常用属性和方法

(1)属性
df = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '预售数量': [100,200,300,400]
})

print(df.size)  # 返回元素总个数 12
print(df.shape)  # 返回行数&列数 (4,3)
print(df.columns) # 返回列索引 Index(['待售书籍', '出版社', '预售数量'], dtype='object')
print(df.columns.tolist()) # 返回列表形式的列索引 ['待售书籍', '出版社', '预售数量']
print(df.index) # 返回行索引 RangeIndex(start=0, stop=4, step=1)
print(df.index.tolist()) # 返回列表形式的行索引 [0, 1, 2, 3]
print(df.axes) # [RangeIndex(start=0, stop=4, step=1), Index(['待售书籍', '出版社', '预售数量'], dtype='object')]
(2)方法
df = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '预售数量': [100,200,300,400]
})

print(df.head(2)) # 前几行数据,默认前5行
print(df.tail(2)) # 后几行数据,默认后5行
print(df.describe()) # 描述统计信息,包括计数、均值、标准差、最值等

(二)建立二维数组

1. 使用DataFrame(数据框)

a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '预售数量': [100,200,300,400]
})

结果是:

   待售书籍  出版社  预售数量
0  小熊之家  爱月社   100
1  复兴之路  兴业社   200
2  操作系统  阳光组   300
3  爱的教育  教育局   400

2. 数据类型可不一致

a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '预售数量': ['100',2.00,300,400]
})

结果是:

   待售书籍  出版社 预售数量
0  小熊之家  爱月社  ¥100
1  复兴之路  兴业社  2.0
2  操作系统  阳光组  300
3  爱的教育  教育局  400
 # 其中,¥100是字串, 2.0是浮点数,300是整数

(三) 获取二维数组的值

1. 按索引取值

a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '预售数量': ['100',2.00,300,400]
})
b = a.loc[0, '待售书籍']  # 小熊之家
b2 = a.loc[1, :] # loc 列索引

结果是: 

待售书籍    复兴之路
出版社      兴业社
预售数量     2.0

# 其中,a的值是:
   待售书籍  出版社 预售数量
0  小熊之家  爱月社  100
1  复兴之路  兴业社  2.0
2  操作系统  阳光组  300
3  爱的教育  教育局  400


2. 按位置取值

a = pd.DataFrame({
        '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
        '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
        '预售数量': ['100',2.00,300,400]
    })
b = a.iloc[0,1]  # 爱月社
b2 = a.iloc[0, :]  # 获取第一行的值(并且呈现表格的形式),iloc 行索引

结果是:

待售书籍    小熊之家
出版社      爱月社
预售数量     100

# 其中,a的值是:
   待售书籍  出版社 预售数量
0  小熊之家  爱月社  100
1  复兴之路  兴业社  2.0
2  操作系统  阳光组  300
3  爱的教育  教育局  400

3. 按列名取值

a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '预售数量': ['100',2.00,300,400]
})
b = a[ ['待售书籍', '出版社'] ] # 双阵列
print(b)

结果是:

   待售书籍  出版社
0  小熊之家  爱月社
1  复兴之路  兴业社
2  操作系统  阳光组
3  爱的教育  教育局

# 其中,a的值是:
    待售书籍  出版社 预售数量
0  小熊之家  爱月社  100
1  复兴之路  兴业社  2.0
2  操作系统  阳光组  300
3  爱的教育  教育局  400

4. 按范围取值

a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '刺猬', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400]
})
b=a.loc[0:2, '作者':'价格¥']

结果是:

   作者  出版社  价格¥
0  星星  爱月社  35.0
1  扇子  兴业社  48.0
2  刺猬  阳光组  37.0

# 其中,a的值是:
   待售书籍  作者  出版社  价格¥  预售数量
0  小熊之家  星星  爱月社  35.0     100
1  复兴之路  扇子  兴业社  48.0     200
2  操作系统  刺猬  阳光组  37.0     300
3  爱的教育  尾巴  教育局  42.0     400

 5. 按自定义条件取值

a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '刺猬', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400]
})
b=a.loc[:, '价格¥'] > 40  # 判断价格是否大于40
c = a.loc[b, :] # 将判断后的索引作为范围条件

结果是:

   待售书籍  作者  出版社  价格¥  预售数量
1  复兴之路  扇子  兴业社  48.0     200
3  爱的教育  尾巴  教育局  42.0     400

# 其中,a的值是:
   待售书籍  作者  出版社  价格¥  预售数量
0  小熊之家  星星  爱月社  35.0     100
1  复兴之路  扇子  兴业社  48.0     200
2  操作系统  刺猬  阳光组  37.0     300
3  爱的教育  尾巴  教育局  42.0     400

# 以及,b的值是:
0    False
1     True
2    False
3     True
Name: 价格¥, dtype: bool

(四)二维数组的数据处理

 1. 列操作

(1)重命名列名
a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '刺猬', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400]
})
a.rename(columns={'待售书籍': '图书名', '作者': '作家'}, inplace=True)
b = a   # 不能用b = a.rename(...),而是b = a
print(b)

结果是:

    图书名   作家  出版社  价格¥  预售数量
0  小熊之家  星星  爱月社  35.0     100
1  复兴之路  扇子  兴业社  48.0     200
2  操作系统  刺猬  阳光组  37.0     300
3  爱的教育  尾巴  教育局  42.0     400
(2)添加新列
a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '刺猬', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400]
})
a['出版时间'] = ['20240101', '20240202', '20240304', '20240405']
print(a)

结果是:

   待售书籍  作者  出版社   价格¥  预售数量     出版时间
0  小熊之家  星星  爱月社    35.0    100        20240101
1  复兴之路  扇子  兴业社    48.0    200        20240202
2  操作系统  刺猬  阳光组    37.0    300        20240304
3  爱的教育  尾巴  教育局    42.0    400        20240405
(3)删除指定列
a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '刺猬', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400]
})
a.drop('待售书籍', axis=1) # axis=1表示操作列
print(a)

结果是:

   作者  出版社    价格¥    预售数量
0  星星  爱月社    35.0       100
1  扇子  兴业社    48.0       200
2  刺猬  阳光组    37.0       300
3  尾巴  教育局    42.0       400

# 其中,a的值是:
   待售书籍  作者  出版社    价格¥    预售数量
0  小熊之家  星星  爱月社    35.0       100
1  复兴之路  扇子  兴业社    48.0       200
2  操作系统  刺猬  阳光组    37.0       300
3  爱的教育  尾巴  教育局    42.0       400

 2. 行操作

(1)删除指定行
a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '刺猬', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400]
})
b = a.drop(0, axis=0)  # 参数位置1的索引0表示第一行, 参数位置2的axis=0表示操作行
print(b)

结果是:

   待售书籍  作者  出版社   价格¥  预售数量
1  复兴之路  扇子  兴业社   48.0     200
2  操作系统  刺猬  阳光组   37.0     300
3  爱的教育  尾巴  教育局   42.0     400

# 其中,a的值是:
   待售书籍  作者  出版社  价格¥  预售数量
0  小熊之家  星星  爱月社  35.0     100
1  复兴之路  扇子  兴业社  48.0     200
2  操作系统  刺猬  阳光组  37.0     300
3  爱的教育  尾巴  教育局  42.0     400

 3. 索引操作

(1)重置索引
a = pd.DataFrame({
    '待售书籍': ['小熊之家', None, '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '刺猬', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400]
})
b = a.dropna(subset=['待售书籍', '作者'], how='any')  # 去除指定列中含有空值的行数据
c = b.reset_index(drop=True)
print(c)

结果是:

   待售书籍  作者  出版社  价格¥  预售数量
0  小熊之家  星星  爱月社  35.0   100
1  操作系统  刺猬  阳光组  37.0   300
2  爱的教育  尾巴  教育局  42.0   400

# 其中,a的值是:
   待售书籍  作者  出版社  价格¥ 预售数量
0  小熊之家  星星  爱月社  35.0   100
1     None  扇子  兴业社  48.0   200
2  操作系统  刺猬  阳光组  37.0   300
3  爱的教育  尾巴  教育局  42.0   400
(2)修改索引
a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '刺猬', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400]
})
a.index  = a['作者']
print(a)

结果是:

      待售书籍  作者  出版社  价格¥ 预售数量
作者
星星  小熊之家  星星  爱月社  35.0   100
扇子  复兴之路  扇子  兴业社  48.0   200
刺猬  操作系统  刺猬  阳光组  37.0   300
尾巴  爱的教育  尾巴  教育局  42.0   400

# 其中,a的原始值是:
   待售书籍  作者  出版社  价格¥ 预售数量
0  小熊之家  星星  爱月社  35.0   100
1  复兴之路  扇子  兴业社  48.0   200
2  操作系统  刺猬  阳光组  37.0   300
3  爱的教育  尾巴  教育局  42.0   400

4. 处理空值

(1)判断空值
a = pd.DataFrame({
    '待售书籍': ['小熊之家', None, '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '刺猬', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400]
})
b= a.isnull()
print(b)

结果是:

      待售书籍     作者      出版社      价格¥      预售数量
0      False      False     False      False        False
1      True       False     False      False        False
2      False      False     False      False        False
3      False      False     False      False        False
(2)填充空值
a = pd.DataFrame({
    '待售书籍': ['小熊之家', None, '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '刺猬', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400]
})
b= a.fillna('空值')
print(b)

结果是:

   待售书籍  作者  出版社   价格¥  预售数量
0  小熊之家  星星  爱月社   35.0     100
1    空值    扇子  兴业社   48.0     200
2  操作系统  刺猬  阳光组   37.0     300
3  爱的教育  尾巴  教育局   42.0     400
(3)删除空值
a = pd.DataFrame({
    '待售书籍': ['小熊之家', None, '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '刺猬', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400]
})
b = a.dropna(subset=['待售书籍', '作者'], how='any')  # 去除指定列中含有空值的行数据

结果是:

   待售书籍  作者  出版社  价格¥ 预售数量
0  小熊之家  星星  爱月社  35.0   100
2  操作系统  刺猬  阳光组  37.0   300
3  爱的教育  尾巴  教育局  42.0   400

# 其中,a的值是:
   待售书籍  作者  出版社  价格¥ 预售数量
0  小熊之家  星星  爱月社  35.0   100
1    None   扇子  兴业社  48.0   200
2  操作系统  刺猬  阳光组  37.0   300
3  爱的教育  尾巴  教育局  42.0   400


 5. 转换数值类型

(1)转成float64格式
a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '刺猬', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400],
    '出版日期':  ['20240101','20240202','20240304','20240405']
})
a['待售书籍'] = a['待售书籍'].astype('float')  # 将object转换为float64格式
print(a)

结果是: 

   待售书籍  作者  出版社    价格¥      预售数量       出版日期
0  小熊之家  星星  爱月社    35.0        100.0        20240101
1  复兴之路  扇子  兴业社    48.0        200.0        20240202
2  操作系统  刺猬  阳光组    37.0        300.0        20240304
3  爱的教育  尾巴  教育局    42.0        400.0        20240405
(2)转成时间格式
a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '刺猬', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400],
    '出版日期': ['20240101','20240202','20240304','20240405']
})
a.loc[:, '出版日期'] = pd.to_datetime(a.loc[:, '出版日期'],
                                        format='%Y%m%d',  # 原数据格式
                                        errors='coerce')  # 不符合格式的值转成NaT
print(a)

结果是:

    待售书籍  作者  出版社   价格¥     预售数量                 出版日期
0  小熊之家   星星  爱月社    35.0        100           2024-01-01 00:00:00
1  复兴之路   扇子  兴业社    48.0        200           2024-02-02 00:00:00
2  操作系统   刺猬  阳光组    37.0        300            2024-03-04 00:00:00
3  爱的教育   尾巴  教育局    42.0        400            2024-04-05 00:00:00

6. 数据排序

a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '刺猬', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400],
    '出版日期': ['20240101','20240202','20240304','20240405']
})
b = a.sort_values(by='出版日期', ascending=True,na_position='first')
# na_position='first' 表示排序时,空值靠前。
print(b)

7.  去重

a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '小熊之家'],
    '作者': ['星星', '扇子', '刺猬', '星星'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400],
    '出版日期': ['20240101','20240202','20240304','20240405']
})
b = a.drop_duplicates(subset=['待售书籍', '作者'])
print(b)

结果是:

   待售书籍  作者  出版社   价格¥  预售数量      出版日期
0  小熊之家  星星  爱月社   35.0     100        20240101
1  复兴之路  扇子  兴业社   48.0     200        20240202
2  操作系统  刺猬  阳光组   37.0     300        20240304

# 其中,a的值:
   待售书籍  作者  出版社   价格¥  预售数量      出版日期
0  小熊之家  星星  爱月社  35.0      100        20240101
1  复兴之路  扇子  兴业社  48.0      200        20240202
2  操作系统  刺猬  阳光组  37.0      300        20240304
3  小熊之家  星星  教育局  42.0      400        20240405

(五)常用函数

1. 运用

        计算每列(而不是每行)

2. 常用

        mean() 求平均数、std()求标准差、count()计数、nunique()去重后计数、groupby() 分组等查询。

(1)mean( )
a = pd.DataFrame({
    '预售数量': [10,20,30,40],
    '实际出售': [100,200,300,400]
})
b = a.mean()

    结果是:

    预售数量     25.0
    实际出售    250.0
(2)groupby( )
a = pd.DataFrame({
    '待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
    '作者': ['星星', '扇子', '星星', '尾巴'],
    '出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
    '价格¥': [35.00,48.00,37.00,42.00],
    '预售数量': [100,200,300,400],
    '出版日期': ['20240101','20240101','20240304','20240405']
})
b = a.groupby(a['出版日期']).sum()
print(b)

结果是:

             待售书籍        作者       出版社        价格¥        预售数量
出版日期
20240101  小熊之家复兴之路  星星扇子  爱月社兴业社      83.0           300
20240304      操作系统       星星       阳光组         37.0          300
20240405      爱的教育       尾巴       教育局         42.0          400

五、分析xls文件

(一)基础环境

执行虚拟环境的终端命令:

pip install openpyxl

(二)查看文件数据

filename = 'D:\book\test\\20240509测试数据book.xlsx' # 文件位置
open_data = pd.read_excel(filename, sheet_name='bookinfo', dtype=str)  # 打开文件
a = open_data.head(10) # 只读取十笔数据
b =open_data.shape # 查看行数、列数 (12, 7)
b =open_data.shape[0] # 查看行数  (12)

 Excel文件内容如下:

(三)处理文件数据

1. 连续范围取值

filename = 'D:\book\test\\20240509测试数据book.xlsx'
open_data = pd.read_excel(filename, sheet_name='bookinfo', dtype=str)
a = open_data.head(6) 
print(a) # 查看截取的部分数据
print(open_data) # 一次性查看所有数据

结果是:

    图书名 name   作者 author  图书类型 btype
0     数据结构       小星星        计算机
1     操作系统       小糖人        计算机
2     无人生还       艾草青       现代文学
3     科幻世界       草莓熊       现代文学
4     世界另我       花木兰       现代文学
5      西游记        吴承恩       古典文学

2. 自定义范围取值

filename = 'D:\book\test\\20240509测试数据book.xlsx'
open_data = pd.read_excel(filename, sheet_name='bookinfo', dtype=str)
a = open_data.loc[0:5, '图书名 name':'图书类型 btype'] #截取数据
print(a)

结果是:

     图书名 name 作者 author 图书类型 btype
0     数据结构       小星星        计算机
1     操作系统       小糖人        计算机
2     无人生还       艾草青       现代文学
3     科幻世界       草莓熊       现代文学
4     世界另我       花木兰       现代文学
5      西游记        吴承恩       古典文学

3. 检查文件数据

filename = 'D:\book\test\\20240509测试数据book.xlsx'
open_data = pd.read_excel(filename, sheet_name='bookinfo', dtype=str)
# a = open_data.head(10)
a = open_data.loc[0:5, '图书号 card':'出版日期 bdate']
b = a.describe() # 可以查看数据笔数、时间格式是否正确等
print(b)

结果是:

       图书号 card 图书名 name 作者 author 图书类型 btype 出版社 press 图书总量 num       出版日期 bdate
count       5          5           5          5              6          6                    5
unique      5          4           4          4              2          5                    5
top       1F001     无人生还      艾草青      计算机         教育部       10             2023-01-04 00:00:00
freq        1          2           2          2              3          2                    1


     

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【精读Yamamoto】方向性连接如何丰富神经网络的功能复杂度 | 体外神经元培养实验 | 脉冲神经元模型(SNN) | 状态转移模型

探索大脑的微观世界:方向性连接如何丰富神经网络的功能复杂度 在神经科学领域,理解大脑如何通过其复杂的网络结构实现高级功能一直是一个核心议题。最近,一项由Nobuaki Monma和Hideaki Yamamoto博士领导的研究为我们提供了新的视角&#xff…

【java-数据结构-栈和队列】

上篇文章,我们已经完成链表的收尾工作,从本篇文章开始,将进入栈和队列的学习,j觉得小编写的还可以的可以留个关注支持一下~话不多说,上正文~ 1.栈 概念:一种特殊的线性表,其只允许在固定的一端…

信创应用软件之协同办公(OA)

信创应用软件之协同办公(OA) 概述 办公 “办公”一词源于历史上对公事、公务处理的简称,现代办公有了更先进的诠释,指在特定时间、特定空间中人互相协作、共同运作的过程, 即围绕以“人”为主的办公主体与其关联的一…

zabbix监控mariadb

zabbix 服务端安装请参阅:红帽 9 zabbix 安装流程_红帽安装zabbix-CSDN博客 源码包安装mariadb请参阅:源码包安装mariadb_mariadb 11 源码编译安装-CSDN博客 在MariaDB中,你需要创建一个专门的用户,用于Zabbix进行监控。这个用户…

百度云内容审核

百度云内容审核介绍 百度智能云内容审核平台:是一款针对多媒体内容进行智能审核的服务平台。支持对图像、文本、音频、视频、直播等内容进行安全审核,具有精准的审核模型、丰富的审核维度、灵活的规则配置等特点。通过可视化界面选择审核维度、个性化调整…

疯狂学英语

我上本科的时候,学校出国留学的气氛不浓厚,我们班只有一名同学有出国留学的倾向,我们宿舍八个人没有一个考虑过留学。 只有小昊,在本校上了研究生之后,不知道受到什么影响,想出国留学。那时候小昊利用一切…

单文件EXE绿色软件制作工具​Enigma Virtual Box​利用 EnigmaVB 打包 Qt 应用程序

功能描述:详细介绍如何利用 EnigmaVB 打包 Qt 应用程序,从 EnigmaVB 软件下载、安装,到如何使用,一步步教你走进 EnigmaVB 软件,最后还介绍了一款针对 Enigma Virtual Box 制作的单文件程序进行解包的工具 EnigmaVBUnp…

【启明智显技术分享】SSD201/SSD202D核心板UI界面开发全攻略:LVGL使用指南

提示:作为Espressif(乐鑫科技)大中华区合作伙伴及sigmastar(厦门星宸)VAD合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考。同时也用心整理了乐鑫及星宸…

数字化信息协同助力智能巡查,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建无人机数字侦查场景下智能靶标检测识别系统

无人机的快速发展与普及,使得其进入千家万户各行各业,发挥着越来越重要的作用。随着科技的飞速发展,未来的数字信息化战场正逐渐展现出其独特的作战形态。在这个以数据和信息为主导的新战场上,无人机侦查手段与人工智能目标智能检…

Django图书馆综合项目-学习

图书馆项目 一 前期准备 安装好所需的环境 我这边用的IDE是VScode 操作系统是MACOS 二 先创建一个虚拟环境 python3 -m venv myenvbook source myenvbook/bin/activate 三 安装 Django pip3 install django4.2 四 创建 Django 项目 django-admin startproject bookp…

二叉树的前序、中序、后序遍历

二叉树的前序、中序、后序 1.二叉树的前序遍历 题目: 二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: 输入&#xff…

LLM应用-文档解析 AI大模型总结分析文档

1)https://notegpt.io/pdf-summary 支持总结,思维导图、对话 2)chatdoc https://chatdoc.com/ 3)chatpdf https://www.chatpdf.com/ https://www.chatpdfs.cn/ 4)kimi https://kimi.moonshot.cn/

004.可观察对象与观察者

Rx非常适合事件驱动的应用程序。这是有意义的,因为事件(作为)(如前所述)是创建时变值的命令式方法。从历史上看,事件驱动编程主要出现在客户端技术中,因为作为事件实现的用户交互。例如,你可能工作过使用OnMouseMove或OnKeyPressed事件。正因…

构建滴滴业务中台:系统架构设计探索

在当今数字化时代,滴滴作为中国领先的出行平台,承载着数亿用户的出行需求,业务规模庞大且复杂多样。为了更好地支撑业务发展和提升服务质量,滴滴不断探索和构建业务中台,以实现业务的快速响应、灵活运营和持续创新。在…

2024年最新青龙面板跑脚本教程(一)持续更新中

文章目录 步骤 1: 安装青龙面板步骤 2: 访问青龙面板步骤 3: 上传或创建JavaScript脚本步骤 4: 添加定时任务步骤 5: 查看日志示例脚本步骤 6: 管理依赖和环境变量通用依赖如下,可手动增加。 要在青龙面板上运行JavaScript脚本,首先需要确保你已经成功安…

JavaEE之线程(4)——线程安全、线程安全的原因,synchronized关键字

前言 在本栏的前面的内容中,我们介绍了线程的创建、Thread 类及常见方法、线程的状态,今天我们来介绍一下关于线程的另一个重点知识——线程安全。 一、线程安全 基本概念: 线程安全的确切定义是复杂的,但我们可以这样认为&…

阿里云OSS配置跨域及域名访问

1、配置跨域 进入对象存储OSS–>OSS存储桶–>数据安全–>跨域设置–>创建规则 2、配置跨域 Etag x-oss-request-id3、配置结果如下 4、数据源配置 切换到数据管理–>静态页面 配置根页面 保存结果如下 5、配置域名访问 绑定域名 添加txt记录 验证绑定 …

【linux-IMX6ULL-uboot初次编译及烧录

目录 1. uboot基本概念1. 1 uboot的编译 3. uboot的烧录2. uboot的烧录结果 第一次不进行原理性的探究,也不关注源码内容,只是进行一个直观的了解,对uboot进行初次编译并进烧录到IMX6ULL板卡中 1. uboot基本概念 U-Boot(Universa…

设计循环队列-C语言实现

题目描述 设计循环队列 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的…

FPGA verilog LVDS通信协议笔记

一幅图胜过千言万语 直接开始挫代码,先写top.v。 module top();reg clk; // 生成时钟的寄存器 reg rst; // 生成复位信号的寄存器initial clk 1; // 初始值取1 always #1 clk ~clk; //1ns取反一次initial begin // 复位信号,先0,过段时间赋…