Python数据分析 Pandas快速入门至进阶这篇就够了

1.简述Pandas

Pandas是Python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来。它基于NumPy构建,提供了大量库和标准数据模型,用于高效地处理大型数据集。Pandas的主要特点包括:

  1. DataFrame:这是一种高效快速的数据结构模式,支持自定义索引。
  2. 数据加载:Pandas可以将不同格式的数据文件加载到内存中。
  3. 数据对齐:即使数据索引方式不同,Pandas也可以按轴自动对齐。
  4. 数据处理:Pandas可以处理时间序列或非时间序列数据,进行高性能的数据分组、聚合、添加、删除等操作,并灵活处理数据缺失和重组。
  5. 应用领域:Pandas广泛用于金融、经济、数据分析、统计等商业领域,为各个领域的数据从业者提供了便捷。

Pandas名字来源于面板数据(panel data)和Python数据分析(data analysis)。它的主要数据结构是Series(一维数据)与DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。

2.安装Pandas 

pip install Pandas

 3.导入Excel表格

 文件目录结构:

(1)导入数据

如果我们想导入文件夹Excel下一个名为data.xlsx的表格

 pd.read_excel('Excel/data.xlsx')

输出前10行数据

print(df.head(10))

示例:

import pandas as pd
df = pd.read_excel('Excel/data.xlsx')
print(df.head(10))

(2)解决数据输出时列名不对齐的问题 

加上pd.set_option('display.unicode.east_asian_width',True)

示例:

import pandas as pd
#解决数据输出时列名不对齐的问题 
pd.set_option('display.unicode.east_asian_width',True)
df = pd.read_excel('Excel/data.xlsx')
print(df.head(10))

 (3)解决出现了行列显示不全的情况

可以通过修改默认输出最大行数和列数

pd.set_option('display.max_rows',1000)
pd.set_option('display.max_columns',30)

示例:

import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
pd.set_option('display.max_rows',1000)
pd.set_option('display.max_columns',30)
df = pd.read_excel('Excel/data.xlsx')
print(df.head(10))

4.Series 对象

Series和DataFrame是Pandas库的两个数据结构

(1)简介

Series是带标签一维同构数组

(2)创建Series对象

s = pd.Series(data,index)

示例:

import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data = [[99,96,95,78,94],[74,66,98,86,88],[74,73,72,94,86],[87,94,88,98,99]]
index = ['索引1','索引2','索引3','索引4']
s = pd.Series(data=data,index=index)
#输出索引
print(s.index)
#输出值
print(s.values)
print(s)

运行结果:

 Index(['索引1', '索引2', '索引3', '索引4'], dtype='object')
[list([99, 96, 95, 78, 94]) list([74, 66, 98, 86, 88])
 list([74, 73, 72, 94, 86]) list([87, 94, 88, 98, 99])]
索引1    [99, 96, 95, 78, 94]
索引2    [74, 66, 98, 86, 88]
索引3    [74, 73, 72, 94, 86]
索引4    [87, 94, 88, 98, 99]
dtype: object

 (3)Series索引

下标索引从0开始

示例:

import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data = [[99,96,95,78,94],[74,66,98,86,88],[74,73,72,94,86],[87,94,88,98,99]]
index = ['索引1','索引2','索引3','索引4']
s = pd.Series(data=data,index=index)
print(s)
print(s[0])
print(s[1])

运行结果:

 索引1    [99, 96, 95, 78, 94]
索引2    [74, 66, 98, 86, 88]
索引3    [74, 73, 72, 94, 86]
索引4    [87, 94, 88, 98, 99]
dtype: object
[99, 96, 95, 78, 94]
[74, 66, 98, 86, 88]

(3)Series切片 

位置切片(只包含位置开始的数据,不包含位置结束的数据)

示例:

import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data = [[99,96,95,78,94],[74,66,98,86,88],[74,73,72,94,86],[87,94,88,98,99]]
index = ['索引1','索引2','索引3','索引4']
s = pd.Series(data=data,index=index)
print(s)
print('切片示例:')
print(s[0:3])

 运行结果:

索引1    [99, 96, 95, 78, 94]
索引2    [74, 66, 98, 86, 88]
索引3    [74, 73, 72, 94, 86]
索引4    [87, 94, 88, 98, 99]
dtype: object
切片示例:
索引1    [99, 96, 95, 78, 94]
索引2    [74, 66, 98, 86, 88]
索引3    [74, 73, 72, 94, 86]
dtype: object

 索引切片(既包含索引开始位置的数据,也包含索引结束位置的数据)

示例:

import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data = [[99,96,95,78,94],[74,66,98,86,88],[74,73,72,94,86],[87,94,88,98,99]]
index = ['索引1','索引2','索引3','索引4']

s = pd.Series(data=data,index=index)
print(s)
print('切片示例:')
print(s['索引1':'索引2'])

 运行结果:

索引1    [99, 96, 95, 78, 94]
索引2    [74, 66, 98, 86, 88]
索引3    [74, 73, 72, 94, 86]
索引4    [87, 94, 88, 98, 99]
dtype: object
切片示例:
索引1    [99, 96, 95, 78, 94]
索引2    [74, 66, 98, 86, 88]
dtype: object

  5.DataFrame对象

(1)简介

DataFrame是带标签二维异构数组

(2)创建DataFrame对象

列表的方式创建

import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data = [[99,96,95,78,94],[74,66,98,86,88],[74,73,72,94,86],[87,94,88,98,99]]
index = ['索引1','索引2','索引3','索引4']
columns = ['数学','英语','语文','政治','历史']
s = pd.DataFrame(data=data,index=index,columns=columns)
print(s)

运行结果:

       数学  英语  语文  政治  历史
索引1    99    96    95    78    94
索引2    74    66    98    86    88
索引3    74    73    72    94    86
索引4    87    94    88    98    99

字典的方式创建 

示例:

import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
index = ['索引1','索引2','索引3','索引4','索引5']
data = {'数学':[99,96,95,78,94],'英语':[74,66,98,86,88],'语文':[74,73,72,94,86],'政治':[87,94,88,98,99]}
s = pd.DataFrame(data=data,index=index)
print(s)

运行结果:

       数学  英语  语文  政治
索引1    99    74    74    87
索引2    96    66    73    94
索引3    95    98    72    88
索引4    78    86    94    98
索引5    94    88    86    99 

(3)常用属性

values: 查看值

datypes: 查看类型

index: 查看行名

columns: 查看列名

head: 查看前n条数据,默认5条

tail: 查看后n条数据,默认后5条

shape: 查看行数和列数,[0]表示行,[1]表示列

T: 行列数据反转

info:查看索引,数据类型,内存信息

示例:

import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
index = ['索引1','索引2','索引3','索引4','索引5']
data = {'数学':[99,96,95,78,94],'英语':[74,66,98,86,88],'语文':[74,73,72,94,86],'政治':[87,94,88,98,99]}
s = pd.DataFrame(data=data,index=index)
print('s.values')
print(s.values)
print('s.dtypes')
print(s.dtypes)
print('s.index')
print(s.index)
print('s.columns')
print(s.columns)
print('s.head(3)')
print(s.head(3))
print('s.tail(2)')
print(s.tail(2))
print('s.shape[0]')
print(s.shape[0])
print('s.shape[1]')
print(s.shape[1])
print('s.T')
print(s.T)
print('s.info')
print(s.info)

(4) 常用函数

max

返回每一列最大值

   min    

返回每一列最小值

sum

返回每一列的和,无法计算返回空值

count

返回每一列非空值的个数

argmax

返回某一列最大值所在的索引位置

argmin

返回某一列最小值所在的索引位置

idxmax

返回最大值所在索引位置

idxmin

返回最小值所在索引位置

mean

返回每一列的平均值

median

返回每一列的平局值

isnull

判断是否有空值,空值为True,否则为False

notnull

判断是否是空值,空值返回False,否则返回True

std

返回每一列的标准差

var

返回每一列的方差

describe

查看每列的统计汇总信息

(5)指定Excel表中的sheet

参数说明
sheep_name=n第n-1个Sheet页中的数据作为DataFrame对象
sheet_name=“商品订单”名为“商品订单”的Sheet页的数据作为DataFrame对象
sheet_name=[n,'商品订单']第n-1个Sheet和名为“商品订单”的Sheet页中的数据作为DataFrame对象

示例:

准备data.xlsx表格里面的Sheep有客户信息和商品订单

输出商品订单这个Sheep的代码:

import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
pd.set_option('display.max_rows',1000)
pd.set_option('display.max_columns',30)
df = pd.read_excel('Excel/data.xlsx',sheet_name="商品订单")
print(df)

运行结果:

 0  ORD1001    产品A   500     张三 2023-05-01
1  ORD1002    产品B   300     李四 2023-05-02
2  ORD1003    产品C   400     王五 2023-05-03
3  ORD1004    产品A   600     赵六 2023-05-04
4  ORD1005    产品B   500     刘七 2023-05-05
5  ORD1006    产品C   300     张三 2023-05-06
6  ORD1007    产品A   400     李四 2023-05-07

(5)数据抽取

想抽取部分数据可以使用DataFrame对象中的loc属性和iloc属性

 loc属性:以列名和行名作为参数对数据进行抽取

iloc属性:以行和列的索引作为参数对数据进行抽取

(6)对缺失数据的处理

使用isnull和notnull方法查询数据是否存在缺失情况

删除有缺失数据的行

df.dropna(inplace=True)

inplace=True表示在原来DataFrame对象上删除重复项,而inplace=Flase表示删除重复项后生成一个副本 

对缺失的数据进行填充

示例: 对缺失的数据填充0

df['数量'] = df['数量'].fillna(0)

(7) 处理重复的数据

判断每一行数据是否重复

示例:如果返回值是Flase,表示不重复,如果返回值是True,表示重复

df.duplicated()

 去除全部重复的数据

示例:

df.drop_duplicates

 去除指定列的重复数据

示例:

df.drop_duplicates(['数量'])

(8)数据排序

使用sort_values方法

常用的参数:

by: 用于指定排序的列。可以是一个列名(字符串)或者是一个列名的列表。
ascending: 默认为 True,表示升序排序。如果设置为 False,则进行降序排序。
axis: 默认为 0,表示按照行进行排序。如果设置为 1,则按照列进行排序。
kind: 用于指定排序算法的类型。默认为 'quicksort',也可以选择 'mergesort' 或 'heapsort'。
key: 用于自定义排序函数。可以传入一个函数,该函数将应用于每个元素上,然后根据返回值进行排序。
na_position: 默认为 'last',表示将 NaN 值放在排序后的最后位置。如果设置为 'first',则将 NaN 值放在排序后的最前面。
inplace: 默认为 False,表示不修改原始 DataFrame 或 Series,而是返回一个新的 DataFrame 或 Series。如果设置为 True,则直接在原始 DataFrame 或 Series 上进行排序。
ignore_index: 默认为 False,表示保留原始的索引。如果设置为 True,则重新生成一个新的整数索引。

(9)数据的增删改

1.数据的添加:

列添加: 使用insert方法

示例:

import pandas as pd  
pd.set_option('display.unicode.east_asian_width', True)  
  
data = [[99, 96, 95, 78, 94], [74, 66, 98, 86, 88], [74, 73, 72, 94, 86], [87, 94, 88, 98, 99]]  
index = ['索引1', '索引2', '索引3', '索引4']  
columns = ['数学', '英语', '语文', '政治', '历史']  
  
s = pd.DataFrame(data=data, index=index, columns=columns)  
s.insert(loc=1, column='物理', value=[100, 98, 95, 94])  # 在'数学'和'英语'之间插入新列'物理'  
print(s)

运行结果:

        数学  物理  英语  语文  政治  历史
索引1    99   100    96    95    78    94
索引2    74    98    66    98    86    88
索引3    74    95    73    72    94    86
索引4    87    94    94    88    98    99

行添加: 使用concat方法

示例:

import pandas as pd

pd.set_option('display.unicode.east_asian_width', True)

data = [[99, 96, 95, 78, 94], [74, 66, 98, 86, 88], [74, 73, 72, 94, 86], [87, 94, 88, 98, 99]]
index = ['索引1', '索引2', '索引3', '索引4']
columns = ['数学', '英语', '语文', '政治', '历史']

s = pd.DataFrame(data=data, index=index, columns=columns)
# 创建一个新的行数据列表
new_row = pd.Series([100, 98, 95, 94, 88], index=['数学', '英语', '语文', '政治', '历史'])

# 使用pandas.concat将新行添加到DataFrame中
s = pd.concat([s, new_row.to_frame().T], ignore_index=True)
print(s)

运行结果:

   数学  英语  语文  政治  历史
0    99    96    95    78    94
1    74    66    98    86    88
2    74    73    72    94    86
3    87    94    88    98    99
4   100    98    95    94    88

2.数据的删除:

使用drop方法

axios=1表示沿着列方向进行操作,axios=0表示沿着行方向进行操作,axios默认为0

删除行示例:

s = s.drop('索引2', axis=0)

删除列示例:

将s中的“语文”列从DataFrame中移除:

s = s.drop('语文', axis=1)

示例:

import pandas as pd

pd.set_option('display.unicode.east_asian_width', True)

data = [[99, 96, 95, 78, 94], [74, 66, 98, 86, 88], [74, 73, 72, 94, 86], [87, 94, 88, 98, 99]]
index = ['索引1', '索引2', '索引3', '索引4']
columns = ['数学', '英语', '语文', '政治', '历史']

s = pd.DataFrame(data=data, index=index, columns=columns)
print(s)
s = s.drop('语文', axis=1)
print('移除语文这列后:')
print(s)

运行结果:

        数学  英语  语文  政治  历史
索引1    99    96    95    78    94
索引2    74    66    98    86    88
索引3    74    73    72    94    86
索引4    87    94    88    98    99
移除语文这列后:
       数学  英语  政治  历史
索引1    99    96    78    94
索引2    74    66    86    88
索引3    74    73    94    86
索引4    87    94    98    99

 

3.数据的修改:

修改名: 使用rename方法

将语文改为物理

示例:

import pandas as pd

pd.set_option('display.unicode.east_asian_width', True)

data = [[99, 96, 95, 78, 94], [74, 66, 98, 86, 88], [74, 73, 72, 94, 86], [87, 94, 88, 98, 99]]
index = ['索引1', '索引2', '索引3', '索引4']
columns = ['数学', '英语', '语文', '政治', '历史']

s = pd.DataFrame(data=data, index=index, columns=columns)
s = s.rename(columns={'语文':'物理'})
print(s)

运行结果:

        数学  英语  物理  政治  历史
索引1    99    96    95    78    94
索引2    74    66    98    86    88
索引3    74    73    72    94    86
索引4    87    94    88    98    99

修改数据: 使用loc属性和iloc属性

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值