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


     

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB | 最新版MATLAB绘图速查表来啦!!

之前看大佬Pjer做的MATLAB速查表 http://home.ustc.edu.cn/~pjer1316/matlabplot/ 感觉非常的实用,最近几次MATLAB更新围绕画图方面也有很多新东西,于是就有了自己做一张最新版的速查表的想法,这张表长这样: 这张表的配色基本上…

[GWCTF 2019]re3

int mprotect(void *addr, size_t len, int prot);实现内存区域的动态权限控制: addr:要修改保护权限的内存区域的起始地址。len:要修改保护权限的内存区域的长度(以字节为单位)。prot:要设置的新的保护权限&#xff…

0513student的Maven项目

0513student的Maven项目包-CSDN博客 数据库字段 主页需求 点击休学按钮, 实现对 ‘’是否休学‘’ ‘’休学操作‘’ 的相应修改; 还有对数据库中相应学生休学状态修改。

家电无缝连接的奥秘—通过酷开系统实现智能家居互联互通

智能家居是消费升级与技术升级的共同产物,是时代发展的必然结果,日渐深入人心也是大势所趋。酷开科技智慧AI,让智慧家居成为生活中的一部分,以酷开系统为中心,实现家庭内智能家居的连接,并可通过酷开系统进…

从零开始详解OpenCV车道线检测

前言 车道线检测是智能驾驶和智能交通系统中的重要组成部分,对于提高道路安全、交通效率和驾驶舒适性具有重要意义。在本篇文章中将介绍使用OpenCV进行车道线的检测 详解 导入包 import cv2 import matplotlib.pyplot as plt import numpy as np读入图像并灰度化…

中学生政史地杂志中学生政史地杂志社中学生政史地编辑部2024年第3期目录

每月时政 时政要闻(2024年2月) 李伟; 3-12 热点聚焦 关注2024年全国两会 汤健云; 13-15 积极应对老龄化,发展银发经济 王吉兴; 16-18《中学生政史地》投稿:cn7kantougao163.com “一带一路”助力柬埔寨经济发展 李…

aop获取方法运行时间

Slf4j Component Aspect//aop类 public class TimeAspect {/*Around 环绕通知 用ProceedingJoinPoint Before 前置通知 用JoinPoint(是ProceedingJoinPoint的父类型),用它可以获得方法执行的相关信息,如目标类名,方法…

WordPress 管理员密码重置方法汇总

最近明月碰到一个 WordPress 站长求助咨询,说是自己 WordPress 站点的管理员密码被恶意篡改了,对 WordPress 了解的都知道这一般都是恶意代码造成的,问题大多出在使用了所谓的破解版、去授权版的插件或者主题被植入了恶意代码、后门木马。明月…

Android Studio Please select Android SDK

解决方案: 1、打开 SDK Manager 2、选择编辑(Edit) 3、 一直Next,直到完成,解决!

大数据在IT行业的应用与发展趋势及IT行业的现状与未来

大数据在IT行业中的应用、发展趋势及IT行业的现状与未来 一、引言 随着科技的飞速发展,大数据已经成为IT行业的重要驱动力。从数据收集、存储、处理到分析,大数据技术为各行各业带来了深远的影响。本文将详细探讨大数据在IT行业中的应用、发展趋势&#…

R语言数据分析案例-股票题目分析

Value at Risk(VaR)是一种统计技术,用于量化投资组合在正常市场条件下可能遭受的最大潜在损失。它是风险管理和金融领域中一个非常重要的概念。VaR通常以货币单位表示,用于估计在给定的置信水平和特定时间范围内,投资组…

嵌入式开发场景下怎么防止源代码泄密

在当今数字化时代,嵌入式系统在各行各业中扮演着至关重要的角色,从智能家居到工业自动化,都离不开这些嵌入式设备的支持。然而,随之而来的是对嵌入式代码安全的日益关注。在嵌入式开发场景下,代码的保护至关重要&#…