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


     

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Traceback (most recent call last): File "D:\PythonProject\数据分析\plot.py", line 39, in <module> dfgroup2.plot(kind="bar") File "D:\anaconda3\lib\site-packages\pandas\plotting\_core.py", line 1000, in __call__ return plot_backend.plot(data, kind=kind, **kwargs) File "D:\anaconda3\lib\site-packages\pandas\plotting\_matplotlib\__init__.py", line 71, in plot plot_obj.generate() File "D:\anaconda3\lib\site-packages\pandas\plotting\_matplotlib\core.py", line 451, in generate self._setup_subplots() File "D:\anaconda3\lib\site-packages\pandas\plotting\_matplotlib\core.py", line 512, in _setup_subplots fig = self.plt.figure(figsize=self.figsize) File "D:\anaconda3\lib\site-packages\matplotlib\_api\deprecation.py", line 454, in wrapper return func(*args, **kwargs) File "D:\anaconda3\lib\site-packages\matplotlib\pyplot.py", line 813, in figure manager = new_figure_manager( File "D:\anaconda3\lib\site-packages\matplotlib\pyplot.py", line 382, in new_figure_manager _warn_if_gui_out_of_main_thread() File "D:\anaconda3\lib\site-packages\matplotlib\pyplot.py", line 360, in _warn_if_gui_out_of_main_thread if _get_required_interactive_framework(_get_backend_mod()): File "D:\anaconda3\lib\site-packages\matplotlib\pyplot.py", line 208, in _get_backend_mod switch_backend(rcParams._get("backend")) File "D:\anaconda3\lib\site-packages\matplotlib\pyplot.py", line 331, in switch_backend manager_pyplot_show = vars(manager_class).get("pyplot_show") TypeError: vars() argument must have __dict__ attribute
06-06

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值