时间:2023.10.16
环境:Windows 10 python3.12
目的:Pandas简单使用
说明:
作者:Zhong QQ交流群:121160124 欢迎加入!
安装
pandas/openpyxl
pip3 install -i https://pypi.douban.com/simple pandas
pip3 install -i https://pypi.douban.com/simple openpyxl
pandas中的数据结构和Excel文档属性的对应关系
pandas处理Excel文件默认行和列的起始索引都是0
属性
pd.set_option()
可设置输出对齐方式、显示行、列等等属性
设置输出右对齐
pd.set_option('display.unicode.east_asian_width', True)
Series
一维数组
DataFrame
矩阵数组
读取文件
读取Excel文件
import pandas as pd
# 要处理的原始Excel表文件
file_path = r"./demo.xlsx"
# 读取Excel文件
df = pd.read_excel(io=file_path, header=None, sheet_name="Sheet1")
io: 指定要读取的Excel文件所在的路径
header: 0(第一行为标题 其它行为数据) 1(第二行为标题 第一行数据默认丢弃 其它行为数据)None(所有行为数据行)
sheet_name: 指定Sheet页的名称 可为索引(默认起始0) 也可以指定Sheet页名称
convert_float: 将所有的数值型字段转换为浮点型字段
usecols: 选择读取其中的列
读取csv
pd.read_csv(...)
读取html
pd.read_html(...)
读取json
pd.read_json(...)
读取sql
pd.read_sql(...)
及其它支持的类型文件
索引获取数据
使用[ ]/loc[]/iloc[ ]/ix[ ]
数据框。[];此函数也称为索引运算符
Dataframe.loc[ ]:此函数用于标签。
Dataframe.iloc[ ]:此函数用于位置或基于整数
Dataframe.ix[]:此函数用于基于标签和整数
获取Sheet页数据行数和列数
# 获取行数
print("number of rows is: ", df.shape[0])
# 获取列数
print("number of columns is: ", df.shape[1])
# 行、列
print("number of rows and columns is: ", df.shape)
所有行索引转为列表
df.index.tolist()
删除数据
df.drop(axis=0, index=ls[2:], inplace=True)
axis: 0为行 1为列
index: 要删除的索引 可为int 可为列表 可为切片
inplace: True 替换原本的内容 False 源数据不变
表格数据去重
df = pd.read_excel(r"./demo.xlsx", sheet_name="Sheet1", usecols=['机构', '日期', '部门'])
df_new = df.drop_duplicates(subset=['机构', '日期', '部门'], keep='first', inplace=False)
subset: 选择以列标题字段组合的数据去重 相同字段的相同数据去重
keep: 重复数据保留第一条/最后一条
inplace:默认为False. True:直接在原数据上删除重复项 False: 删除重复项后返回副本
分组后保存
以列标题为条件分组
# 分组
grouped = df.groupby(['机构'], group_keys=False).apply(lambda x:x)
grouped.to_excel("ok.xlsx", sheet_name='Sheet1', index=False)
groupby(["标题1", "标题2"]) 可以指定多个标题分组数据
group_keys 为False可以使分组字段不做为索引 为True分组字段将索引
apply(lambda x:x)转换DataFrameGroupBy object为DataFrame object 可进行存储
如果 group_keys=True index=True 那么将会保存源数据的分组键为索引 数据索引为源数据索引的数据
聚合计算
平均值
最小值
最大值
数量统计
中位数
总和
排序
# 修改源数据 源索引不变
df.sort_values(by="机构", ascending=True, inplace=True)
# 不修改源数据 将修改后的数据赋值
df1 = df.sort_values(by="机构", ascending=True, inplace=False)
by=["title1", "title2", ...] 可指定多列排序
ascending默认升序 False降序 ascending=[False, True]对多个标题分别指定排序的规则
inplace默认False 不改变df数据 将排序后的数据赋值df1 True修改源数据 源索引不变