Backend - 数据分析 Pandas

news2024/10/6 1:42:34

目录

一、作用

二、基础环境

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

 (二)代码中导包

三、应用:一维数组

(一)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.coloradmin.cn/o/1673087.html

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

相关文章

springboot学习整理

视频:基础篇-01_springboot概述_哔哩哔哩_bilibili 介绍 spring boot 是spring提供的一个子项目,用于快速构建spring应用程序 spring构建: 1 导入依赖繁琐 ; 2 项目配置繁琐 spring Framework: 核心 spring Boot :快速构建spring…

【LangChain学习之旅】—(21)聊天客服机器人的开发(上)

【LangChain学习之旅】—(21)聊天客服机器人的开发(上) “聊天机器人”说明项目的技术实现细节技术实现步骤简述第二步:增加记忆机制第三步:增加检索机制总结“聊天机器人”说明 聊天机器人(Chatbot)是 LLM 和 LangChain 的核心用例之一,很多人学习大语言模型,学习 …

Jmeter(三十九) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 - 上篇(详解教程)

宏哥微信粉丝群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 为什么宏哥要对Jmeter的配置文件进行一下讲解了,因为有的童鞋或者小伙伴在测试中遇到一些需要修改配置文件的问题不是很清楚也不是很懂,就算修改了也是…

今天开发了一款软件,我竟然只用敲了一个字母(文末揭晓)

软件课题:Python实现打印100内数学试题软件及开发过程 一、需求管理: 1.实现语言:Python 2.打印纸张:A4 3.铺满整张纸 4.打包成exe 先看效果: 1. 2.电脑打印预览 3.打印到A4纸效果(晚上拍的&#x…

R语言手把手教你进行支持向量机分析

1995年VAPINK 等人在统计学习理论的基础上提出了一种模式识别的新方法—支持向量机 。它根据有限的样本信息在模型的复杂性和学习能力之间寻求一种最佳折衷。 以期获得最好的泛化能力.支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部极小值,从而也保证了它对未知…

云粒智慧实时数仓的架构演进分享:OceanBase + Flink CDC

4月20日,在2024 OceanBase开发者大会上,云粒智慧的高级技术专家付大伟,分享了云粒智慧实时数仓的构建历程。他讲述了如何在传统数仓技术框架下的相关努力后,选择了OceanBase Flink CDC架构的实时数仓演进历程。 业务背景及挑战 …

企业数据治理过程有哪些挑战?该如何克服?

在数字化时代,数据已成为企业最宝贵的资产之一。随着大数据、云计算和人工智能等技术的兴起,企业积累的数据量呈指数级增长。这些数据中蕴含着巨大的商业价值,对于推动企业发展、优化决策制定、增强市场竞争力具有不可替代的作用。然而&#…

Python-VBA函数之旅-type函数

目录 一、type函数的常见应用场景 二、type函数使用注意事项 三、如何用好type函数? 1、type函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://myelsa1024.blog.csdn.net/ 一、type函…

企业微信hook接口协议,ipad协议http,获取群成员列表简洁版

获取群成员列表简洁版 参数名必选类型说明uuid是String每个实例的唯一标识,根据uuid操作具体企业微信 请求示例 {"uuid":"3240fde0-45e2-48c0-90e8-cb098d0ebe43","roomid":10696052955016166 } 返回示例 {"data": {&q…

政安晨:【Keras机器学习示例演绎】(四十四)—— 使用序列到序列转换器实现英语到西班牙语的翻译

目录 简介 设置 下载数据 解析数据 文本数据矢量化 建立模型 训练我们的模型 解码测试句子 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益,如有不足之…

智慧管家物业管理系统(小组项目)

目录 前言 一、项目介绍 1、目的和背景 2、项目主要内容 3、技术介绍 二、功能模块 1、重要文件结构 2、功能实现(部分个人负责模块功能) 2.1 展示房源信息页面 2.2 房屋详情页面 2.3 房源信息管理 三、功能模块页面 1、前台模块 2、后台…

使用vue3+ts+vite从零开始搭建bolg(五):layout(持续更新中)

五、layout搭建 5.1静态搭建 在src下创建如图文件夹 这里用logo举例&#xff0c;在scripts里export <script lang"ts">export default {name: Logo,}</script> 然后在layout里引入 //引入左侧菜单顶部用户信息 import Logo from ./logo/index.vue 接…

M-有效算法

在赛场上&#xff0c;脑子就两个字“二分”&#xff0c;一点思路都没&#xff0c;完全不知道二分谁&#xff0c;怎么二分&#xff0c;从哪入手。隐隐约约也知道要变换公式&#xff0c;可惜没坚持这个想法。脑子里全是把k分离出来&#xff0c;赛后看了题解才知道&#xff0c;应该…

Electron + GitHub Actions | 自动化流程详解(下)

自动化部署 上篇介绍了 Electron Forge 打包应用教程。在实际开发中&#xff0c;自动化是提升效率和产出质量的关键。本篇我们将详细介绍如何将构建和发布 Electron 应用的过程自动化。 代码挂在 GitHub 仓库上&#xff0c;如果有帮助&#xff0c;记得给仓库点个赞&#xff1a…

【ARM Cortex-M 系列 2.1 -- Cortex-M7 Debug system registers】

请阅读【嵌入式开发学习必备专栏】 文章目录 Debug system registers中断控制状态寄存器&#xff08;ICSR&#xff09;Debug Halting Control and Status Register, DHCSR Debug 寄存器DCRSR与DCRDRCPU 寄存器读操作CPU 寄存器写操作CPU 寄存器选择CPU 寄存器读写示例 调试故障…

【MQTT】paho.mqtt.cpp 库的 介绍、下载、交叉编译、MQTT客户端例子源码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-05-13 1…

盘他系列——oj!!!

1.Openjudge 网站: OpenJudge 2.洛谷 网站: 首页 - 洛谷 | 计算机科学教育新生态 3.环球OJ 网站: QOJ - QOJ.ac 4. 北京大学 OJ:Welcome To PKU JudgeOnline 5.自由OJ 网站: https://loj.ac/ 6.炼码 网站:LintCode 炼码 8.力扣 网站: 力扣 9.晴练网首页 - 晴练网

安科瑞AIM-D100-ES光伏储能系统直流绝缘监测仪

概述 AIM-D100-ES 型直流绝缘监测仪主要用于在线监测直流不接地系统正负极对地绝缘电阻&#xff0c;当绝缘电阻低于设定值时&#xff0c;能发出预警和报警信号。 产品可测 100-1500V 的直流系统&#xff0c;可应用于储能直流系统、电动汽车充电装置、UPS 供电系统、光伏直流系…

第十一届蓝桥杯大赛软件类决赛 Java C 组

文章目录 发现宝藏【考生须知】试题 A: 美丽的 2试题 B: 合数个数试题 C: 扩散试题 D: 阶乘约数试题 E: 本质上升序列试题 F 天干地支试题 G 皮亚诺曲线距离试题 H 蓝肽子序列试题 I: 画廊试题 J 答疑 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&a…

本地运行《使用AMD上的SentenceTransformers构建语义搜索》

Building semantic search with SentenceTransformers on AMD — ROCm Blogs 这篇博客解释了如何在Sentence Compression数据集上训练SentenceTransformers模型来执行语义搜索。使用BERT基础模型&#xff08;不区分大小写&#xff09;作为基础的变换器&#xff0c;并应用Huggi…