Pandas是Python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来。它基于NumPy构建,提供了大量库和标准数据模型,用于高效地处理大型数据集。Pandas的主要特点包括:
Pandas名字来源于面板数据(panel data)和Python数据分析(data analysis)。它的主要数据结构是Series(一维数据)与DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。
pip install Pandas
文件目录结构:
如果我们想导入文件夹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))
加上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))
可以通过修改默认输出最大行数和列数
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))
Series和DataFrame是Pandas库的两个数据结构
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]
位置切片(只包含位置开始的数据,不包含位置结束的数据)
示例:
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
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
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)
max |
返回每一列最大值 |
min |
返回每一列最小值 |
sum |
返回每一列的和,无法计算返回空值 |
count |
返回每一列非空值的个数 |
argmax |
返回某一列最大值所在的索引位置 |
argmin |
返回某一列最小值所在的索引位置 |
idxmax |
返回最大值所在索引位置 |
idxmin |
返回最小值所在索引位置 |
mean |
返回每一列的平均值 |
median |
返回每一列的平局值 |
isnull |
判断是否有空值,空值为True,否则为False |
notnull |
判断是否是空值,空值返回False,否则返回True |
std |
返回每一列的标准差 |
var |
返回每一列的方差 |
describe |
查看每列的统计汇总信息 |
参数 | 说明 |
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
想抽取部分数据可以使用DataFrame对象中的loc属性和iloc属性
loc属性:以列名和行名作为参数对数据进行抽取
iloc属性:以行和列的索引作为参数对数据进行抽取
使用isnull和notnull方法查询数据是否存在缺失情况
df.dropna(inplace=True)
inplace=True表示在原来DataFrame对象上删除重复项,而inplace=Flase表示删除重复项后生成一个副本
示例: 对缺失的数据填充0
df['数量'] = df['数量'].fillna(0)
示例:如果返回值是Flase,表示不重复,如果返回值是True,表示重复
df.duplicated()
示例:
df.drop_duplicates
示例:
df.drop_duplicates(['数量'])
使用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,则重新生成一个新的整数索引。
列添加: 使用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
使用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
修改名: 使用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属性