python使用pandas的常用操作

文章目录

    • 安装导入
    • 主要数据结构
    • 常用方法和操作
      • 创建数据结构
      • 读取和写入数据
      • 数据选择和过滤
      • 数据操作
      • 基本统计分析
      • 分组和聚合
      • 合并和连接
      • 重塑数据
        • 1. pivot 和 pivot_table
        • 2. melt
        • 3. stack和 unstack
    • 常用方法总结
    • pandas操作excel
      • 安装相关库
    • 读取单个工作表
    • 读取指定工作表
    • 读取多个工作表
    • 写入单个 DataFrame 到 Excel
    • 写入多个 DataFrame 到不同工作表
    • 追加数据到现有 Excel 文件
    • 写入带有超链接的内容
      • 借助openpyxl写入

Pandas 的名字来源于“Panel Data”和“Python Data Analysis Library”的缩写。它最初由 Wes McKinney 开发,旨在提供高效、灵活的数据操作和分析工具。Pandas 在数据科学、统计分析、金融、经济学等领域得到了广泛应用。

Pandas 是一个用于数据操作和分析的开源 Python 库。它提供了高性能、易于使用的数据结构和数据分析工具。Pandas 的核心数据结构是 SeriesDataFrame,分别用于处理一维和二维数据。

pandas菜鸟教程:https://www.runoob.com/pandas/pandas-tutorial.html

pandas官方文档:https://pandas.pydata.org/docs

pandas源代码:https://github.com/pandas-dev/pandas

安装导入

1、安装pandas

pip install pandas

2、导入 Pandas

import pandas as pd

主要数据结构

  1. Series: 一维数组,类似于 Python 列表或 Numpy 数组,但具有标签(索引)。

    import pandas as pd
    # 创建一个 Series
    s = pd.Series([1, 3, 5, 7, 9])
    print(s)
    

    输出如下:

    在这里插入图片描述

  2. DataFrame: 二维表格数据结构,类似于 Excel 表格或 SQL 表。

    import pandas as pd
    # 创建一个 DataFrame
    data = {'Name': ['小仔', '大仔', '梦无矶'],'Age': [15, 18, 99],'City': ['上海', '长沙', '杭州']
    }
    df = pd.DataFrame(data)
    print(df)
    

    输出如下:

    在这里插入图片描述

常用方法和操作

创建数据结构

import pandas as pddf = pd.DataFrame()print(df) # 这样创建的就是一个空数据结构

读取和写入数据

# 读取 CSV 文件
df = pd.read_csv('data.csv')# 写入 CSV 文件
df.to_csv('output.csv', index=False)

数据选择和过滤

import  pandas as pddf = pd.read_csv('excel_path/data.csv')# 选择列
print(df['Name'])
print("------------------------------")
print(df[['Name', 'Age']])
print("------------------------------")# 根据索引选择行
print(df.iloc[0])  # 第一行
print("------------------------------")
print(df.iloc[1:3])  # 第二行到第三行
print("------------------------------")
# 根据标签选择行
print(df.loc[0])  # 第一行
print("------------------------------")
print(df.loc[0:1])  # 第一行到第二行
print("------------------------------")# 条件过滤 # 选择年龄大于30的行
print(df[df['Age'] > 30])

输出:

0     小仔
1     大仔
2    梦无矶
Name: Name, dtype: object
------------------------------Name  Age
0   小仔   15
1   大仔   18
2  梦无矶   99
Name    小仔
Age     15
City    上海
Name: 0, dtype: object
------------------------------Name  Age City
1   大仔   18   长沙
2  梦无矶   99   杭州
------------------------------
Name    小仔
Age     15
City    上海
Name: 0, dtype: object
------------------------------Name  Age City
0   小仔   15   上海
1   大仔   18   长沙
------------------------------Name  Age City
2  梦无矶   99   杭州

数据操作

import pandas as pddf = pd.read_csv('excel_path/data.csv')# 添加新列
df['Salary'] = [50000, 60000, 70000]print(df, end="\n\n")# 删除列
df = df.drop(columns=['Salary'])
print(df, end="\n\n")# 修改列 年龄这一列的所有年龄+1
df['Age'] = df['Age'] + 1print(df, end="\n\n")# 缺失值处理 填充缺失值 使用每列的均值填充缺失值
df['Age'].fillna(df['Age'].mean(), inplace=True)
print(df, end="\n\n")

输出:

  Name   Age City  Salary
0   小仔  15.0   上海   50000
1   大仔  18.0   长沙   60000
2  梦无矶   NaN   杭州   70000Name   Age City
0   小仔  15.0   上海
1   大仔  18.0   长沙
2  梦无矶   NaN   杭州Name   Age City
0   小仔  16.0   上海
1   大仔  19.0   长沙
2  梦无矶   NaN   杭州Name   Age City
0   小仔  16.0   上海
1   大仔  19.0   长沙
2  梦无矶  17.5   杭州

缺失值填充扩展:

import pandas as pd
import numpy as np# 创建一个包含缺失值的 DataFrame
data = {'A': [1, 2, np.nan, 4],'B': [np.nan, 2, 3, 4],'C': [1, 2, 3, np.nan]
}
df = pd.DataFrame(data)# 检查每个单元格是否缺失
print(df.isna())# 检查每列的缺失值总数
print(df.isna().sum())# 删除包含缺失值的行
df_dropped_rows = df.dropna()
print(df_dropped_rows)# 删除包含缺失值的列
df_dropped_cols = df.dropna(axis=1)
print(df_dropped_cols)# 使用常数填充缺失值
df_filled_constant = df.fillna(0)
print(df_filled_constant)# 使用前一个值(向前填充)填充缺失值
df_filled_ffill = df.fillna(method='ffill')
print(df_filled_ffill)# 使用后一个值(向后填充)填充缺失值
df_filled_bfill = df.fillna(method='bfill')
print(df_filled_bfill)# 使用每列的均值填充缺失值
df_filled_mean = df.fillna(df.mean())
print(df_filled_mean)# 使用每列的中位数填充缺失值
df_filled_median = df.fillna(df.median())
print(df_filled_median)# 仅填充特定列的缺失值
df['A'] = df['A'].fillna(df['A'].mean())
print(df)# 使用线性插值法填充缺失值
df_interpolated = df.interpolate()
print(df_interpolated)# 先向前填充,再向后填充
df_combined_fill = df.fillna(method='ffill').fillna(method='bfill')
print(df_combined_fill)

基本统计分析

# -*- coding: utf-8 -*-
"""
@Time : 2024/6/4 13:43
@Email : Lvan826199@163.com
@公众号 : 梦无矶的测试开发之路
@File : 07_基本统计分析.py
"""
__author__ = "梦无矶小仔"import pandas as pddf = pd.read_csv('excel_path/data.csv')# 数据描述性统计
print(df.describe())
print("----------------")
# 计算平均值
print(df['Age'].mean())# 计算中位数
print(df['Age'].median())# 计算标准差
print(df['Age'].std())# 计算最大值
print(df['Age'].max())# 计算最小值
print(df['Age'].min())

输出:

            Age
count   3.00000
mean   44.00000
std    47.65501
min    15.00000
25%    16.50000
50%    18.00000
75%    58.50000
max    99.00000
----------------
44.0
18.0
47.65501022977542
99
15

分组和聚合

# 按城市分组并计算平均年龄
grouped = df.groupby('City')['Age'].mean()

合并和连接

__author__ = "梦无矶小仔"
import pandas as pddf = pd.read_csv('excel_path/data.csv')# 创建另一个 DataFrame 注意这个Name相当于是键
data2 = {'Name': ['小美', '梦无矶', '小仔'],'Salary': [50000, 60000, 80000]
}
df2 = pd.DataFrame(data2)# 合并两个 DataFrame
merged_df = pd.merge(df, df2, on='Name', how='inner')print(merged_df)

输出:

  Name  Age City  Salary
0   小仔   15   上海   80000
1  梦无矶   99   杭州   60000
2   小美   17   杭州   50000

重塑数据

数据重塑(Data Reshaping)是指改变数据表的结构或格式,以便更好地进行数据分析和处理。重塑数据通常包括将数据从宽格式转换为长格式,或从长格式转换为宽格式。

1. pivot 和 pivot_table

pivot 方法用于将长格式数据转换为宽格式数据,类似于 Excel 中的数据透视表。

__author__ = "梦无矶小仔"import pandas as pd# 示例数据
data = {'Date': ['2024-06-01', '2024-06-02', '2024-06-01', '2024-06-02'],'City': ['杭州', '赣州', '赣州', '杭州'],'Temperature': [20, 30, 45, 40]
}
df = pd.DataFrame(data)# 使用 pivot 将长格式数据转换为宽格式
pivot_df = df.pivot(index='Date', columns='City', values='Temperature')
print(pivot_df)

输出:

City        杭州  赣州
Date              
2024-06-01  20  45
2024-06-02  40  30

pivot_table方法更灵活,可以进行聚合操作。

# 使用 pivot_table 进行聚合
pivot_table_df = df.pivot_table(index='Date', columns='City', values='Temperature', aggfunc='mean')
print(pivot_table_df)
2. melt

melt 方法用于将宽格式数据转换为长格式数据。

melted_df = pivot_df.reset_index().melt(id_vars='Date', value_vars=['赣州', '杭州'], var_name='City', value_name='Temperature')
print(melted_df)

输出:

         Date City  Temperature
0  2024-06-01   赣州           45
1  2024-06-02   赣州           30
2  2024-06-01   杭州           20
3  2024-06-02   杭州           40
3. stack和 unstack

stack 方法将数据的列索引转换为行索引,而 unstack则相反。

# 使用 stack 将列索引转换为行索引
stacked_df = pivot_df.stack()
print(stacked_df)

输出:

Date        City
2024-06-01  杭州      20赣州      45
2024-06-02  杭州      40赣州      30
dtype: int64
# 使用 unstack 将行索引转换为列索引
unstacked_df = stacked_df.unstack()
print(unstacked_df)

输出与 pivot_df相同:

City        杭州  赣州
Date              
2024-06-01  20  45
2024-06-02  40  30

常用方法总结

  1. 读取和写入数据:
    • pd.read_csv(), pd.read_excel(), pd.read_sql()
    • DataFrame.to_csv(), DataFrame.to_excel(), DataFrame.to_sql()
  2. 数据选择和过滤:
    • DataFrame.loc[], DataFrame.iloc[], DataFrame.at[], DataFrame.iat[]
    • 条件过滤:DataFrame[condition]
  3. 数据操作:
    • 添加/删除列:DataFrame['new_column'], DataFrame.drop()
    • 修改列:直接赋值
    • 缺失值处理:DataFrame.isnull(), DataFrame.fillna(), DataFrame.dropna()
  4. 统计分析:
    • 描述性统计:DataFrame.describe()
    • 计算:mean(), median(), std(), sum(), min(), max()
  5. 分组和聚合:
    • DataFrame.groupby(), DataFrame.agg(), DataFrame.apply()
  6. 合并和连接:
    • pd.merge(), DataFrame.join(), pd.concat()
  7. 重塑数据:
    • 转置:DataFrame.T
    • 重置索引:DataFrame.reset_index()
    • Pivot表:DataFrame.pivot(), DataFrame.pivot_table()

其他的不会再查!

pandas操作excel

pandas不能直接操作excel,因此我们需要依赖其他的第三方库进行操作,比如openpyxl

安装相关库

pip install openpyxl

读取单个工作表

# 读取 Excel 文件中的第一个工作表
df = pd.read_excel('excel_path/data.xlsx')
print(df)

输出:

# 读取 Excel 文件中的第一个工作表
df = pd.read_excel('data.xlsx')
print(df)

读取指定工作表

# 读取 Excel 文件中的指定工作表,读取Sheet2表,如果该表不存在会报错
df = pd.read_excel('data.xlsx', sheet_name='Sheet2')
print(df)

输出:

  Name City  Age
0   小仔   杭州   98

读取多个工作表

# 读取 Excel 文件中的多个工作表
dfs = pd.read_excel('data.xlsx', sheet_name=['Sheet1', 'Sheet2'])
print(dfs['Sheet1'])
print(dfs['Sheet2'])# 读取所有工作表
dfs = pd.read_excel('data.xlsx', sheet_name=None)
for sheet_name, df in dfs.items():print(f"Sheet name: {sheet_name}")print(df)

写入单个 DataFrame 到 Excel

__author__ = "梦无矶小仔"import pandas as pd# 创建一个 DataFrame
data = {'Name': ['悖谬', '申鹤', '凯茜娅'],'Age': [18, 20, 25],'City': ['我家', '我房间', '我卧室']
}
df = pd.DataFrame(data)# 写入到 Excel 文件
df.to_excel('excel_path/output.xlsx', index=False)

在这里插入图片描述

写入多个 DataFrame 到不同工作表

# -*- coding: utf-8 -*-
"""
@Time : 2024/6/4 15:20
@Email : Lvan826199@163.com
@公众号 : 梦无矶的测试开发之路
@File : 13_写入多个DataFrame到Excel.py.py
"""
__author__ = "梦无矶小仔"import pandas as pd# 创建一个 DataFrame
data = {'Name': ['悖谬', '申鹤', '凯茜娅'],'Age': [18, 20, 25],'City': ['我家', '我房间', '我卧室']
}
df = pd.DataFrame(data)# 创建另一个 DataFrame
data2 = {'Name': ['刻晴', '丽莎', '巴尔泽布'],'Age': [19, 21, 24],'City': ['璃月', '蒙德', '稻妻']
}df2 = pd.DataFrame(data2)# 写入到不同工作表
with pd.ExcelWriter('excel_path/write1.xlsx') as writer:df.to_excel(writer, sheet_name='Sheet1', index=False)df2.to_excel(writer, sheet_name='Sheet2', index=False)

追加数据到现有 Excel 文件

__author__ = "梦无矶小仔"import  pandas as pd# 读取现有的 Excel 文件
existing_df = pd.read_excel('excel_path/output.xlsx', sheet_name='Sheet1')# 新数据
new_data = {'Name': ['无妨', '紫霄'],'Age': [55, 60],'City': ['木星', '海王星']
}
new_df = pd.DataFrame(new_data)# 追加新数据到现有 DataFrame
updated_df = pd.concat([existing_df, new_df], ignore_index=True)# 写入回 Excel 文件
with pd.ExcelWriter('excel_path/output.xlsx', mode='a', if_sheet_exists='replace') as writer:updated_df.to_excel(writer, sheet_name='Sheet1', index=False)

写入带有超链接的内容

pandas里面写入使用=HYPERLINK字段处理。

# 字典数据
df = pandas.DataFrame(字典数据, index=[0])  
# 加超链接
df._set_value(0, '字段名', '=HYPERLINK("{}", "点击跳转详情")'.format(字段名)) 

示列:

__author__ = "梦无矶小仔"import pandas as pd# 创建一个 DataFrame
data = {'Name': ['蕾姆'],'Age': [20],'City': ['独栋别墅']
}
df = pd.DataFrame(data, index=[0]) # 多行写入不需要加index=[0]goto = 'https://www.baidu.com/s?wd=%E7%8B%AC%E6%A0%8B%E5%88%AB%E5%A2%85'
# 加超链接 0表示写入的位置
df._set_value(0, "City", '=HYPERLINK("{}", "点击跳转详情")'.format(goto))# 写入到 Excel 文件
df.to_excel('excel_path/write2.xlsx', index=False)

点击就可以直接跳转了。

在这里插入图片描述

借助openpyxl写入

__author__ = "梦无矶小仔"import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl.styles import Font# 现有的 Excel 文件
excel_file = 'excel_path/write3.xlsx'# 创建新的 DataFrame 以追加
new_data = {'Name': ['百度', 'CSDN主页'], 'URL': ['https://www.baidu.com', 'https://blog.csdn.net/qq_46158060']}
new_df = pd.DataFrame(new_data)# 使用 openpyxl 加载现有的工作簿
wb = load_workbook(excel_file)
# ws = wb.active
ws = wb["Sheet1"]# 找到最后一行
if ws.max_row == 1 and ws.cell(row=1, column=1).value is None:last_row = 0
else:last_row = ws.max_row# 将新的 DataFrame 追加到现有的 Excel 文件
for r in dataframe_to_rows(new_df, index=False, header=last_row == 0):ws.append(r)# 添加超链接和样式
start_row = last_row + 1 if last_row != 0 else 1
for row in range(start_row, start_row + len(new_df)):cell = ws.cell(row=row, column=1)url = ws.cell(row=row, column=2).valuecell.hyperlink = urlcell.font = Font(color="0000FF", underline="single")# 保存工作簿
wb.save(excel_file)

上面这些全部可以自己封装成通用的方法,以后要使用直接调用就可以了。

本文所有代码地址:

github:https://github.com/Lvan826199/mwj_utils
gitee:https://gitee.com/xiaozai-van-liu/mwj_utils

关于使用openpyxl进行excel操作,比如样式写入,单元格样式调整,链接跳转,放到下次讲。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/22298.shtml

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

相关文章

短视频矩阵系统源码---开发BS架构B/S(Browser/Server Architecture)架构

短视频矩阵系统源头开发------- 第一款叫做筷子科技,这个筷子科技剪辑和发布都是没有问题的,但是前一段时间他的剪辑发个公告,每个账号只能发两条,另外它的唯一缺点就是它成本比较高的,入门门槛应该在12800左右&#…

CHATGPT升级plus(已有账号前提下)

注册wildcard(虚拟卡) 注册号账号后先进行充值,充值后选择CHATGPT一键升级按照他的流程来即可 Wildcard网址:Wildcard跳转注册 填写邀请码充值时少两美金合计14¥ 邀请码:OL3QXTRH

【2022-2011年】地级市数字经济指数原始数据+测算dofile+结果

参照赵涛等(2020)的文章,利用熵值法对城市数字经济指数进行测算,包括原始数据、线性插值、回归填补3种版本下测算的数字经济指数。保留原始数据、stata代码和测算结果,大家可进行复现 一、数据介绍 数据名称&#x…

Python爬虫协程批量下载图片

import aiofiles import aiohttp import asyncio import requests from lxml import etree from aiohttp import TCPConnectorclass Spider:def __init__(self, value):# 起始urlself.start_url value# 下载单个图片staticmethodasync def download_one(url):name url[0].spl…

几万块投入,预防几百万损失——客户风险管理如何高效落地?

作为公司的风控负责人,老张近来最头疼的莫过于某大客户突然暴雷,一次性“送”了公司几十万坏账。事后复盘,老张发现公司现有的客户风险管理体系已相对落后,不再适用于快速变化的商业环境: 客户风险定级依靠销售人员提…

哥斯拉、冰蝎、中国蚁剑在护网中流量特征分析,收藏起来当资料吧,24年护网用得上

护网哥斯拉、冰蝎、中国蚁剑流量分析 【点击免费领取】CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》🔗包含了应急响应工具、入侵排查、日志分析、权限维持、Windows应急实战、Linux应急实战、Web应急实战。 护网中最担心的是木马已经到了服…

ffmpeg.dll在哪个文件夹?怎么快速的修复ffmpeg.dll文件的丢失

在处理多媒体文件时,ffmpeg.dll文件扮演着至关重要的角色。它是FFmpeg项目的一部分,该项目提供了一套能够录制、转换和流化音视频的工具和库。用户有时可能会遇到 ffmpeg.dll文件丢失的问题,这个问题可能会妨碍视频编辑软件等应用程序的正常运…

《计算机在材料科学中的应用》、《计算材料学》、《计算化学》、《计算物理学》、《计算矿物学》、《量子动力学与光谱》这些高校课程,优秀大学的老师都是怎么讲的?

《计算机在材料科学中的应用》、《计算材料学》、《计算化学》、《计算物理学》、《计算矿物学》、《量子动力学与光谱》等高校课程面临以下问题 PWmat开课优势:拥有30余年代码开发经验,产品拥有自主知识产权,软著和知识产权均国产化网上可查…

零基础python爬虫从入门到精通

零基础python爬虫从入门到精通 课程介绍学习地址下期更新预报 课程介绍 本套视频教程适合想掌握爬虫技术的学习者,以企业主流版本Python 3.7来讲解,内容包括:Python基础、Urllib、解析(xpath、jsonpath、beautiful)、…

Windows 11下载以及安装教程

1.下载安装 Windows 有三种下载方式,根据需求,选择其中一种方式就可以。 安装助手 下载工具,进行下载 下载Windows 11 镜像文件ISO 安装后效果 查看状态 2.下载 Windows 工具 https://pan.baidu.com/s/1dFl9QQ1rIGcsZLUD0dym6A?pwdwin1…

MYSQL数据库客户端常规指令使用

这里新开一章,对MYSQL进行更加底层的系统的一个学习 Mysql常用工具简介 emmmm这里的话就默认大家在linux系统上面都进行了MYSQL的安装了. 在mysql安装完成之后,一般在路径 /usr/bin 下的 我们对该路径进行一个文件的展示 这里是展示出来的辅助工具 …

海外短剧新体验:多平台适用,语言无障碍

前言 在数字化时代的浪潮下,海外短剧作为一种新兴的视听媒介,正逐渐走进我们的生活。这些由国外制作团队精心打造的短片或微电影,不仅内容丰富多彩,更在跨文化传播中展现出独特的魅力。 一、海外短剧系统有什么亮点? …

JS面试题:hash和history的区别

一、hash 模式和 history 模式的介绍 由于 Vue 项目为单页面应用,所以整个项目在开发和构建过程中,仅存在一个HTML物理文件。通过路由系统可以实现将项目的组件与可访问的URL路径进行绑定。由于Vue项目只有一个HTML物理文件,切换页面时既需要…

Android中打印某应用的堆栈信息

先更具报名获取pid adb shell "ps|grep 包名" zygote的堆栈dump 实际上这个可以同时dump java线程及native线程的堆栈&#xff0c;对于java线程&#xff0c;java堆栈和native堆栈都可以得到。 kill -3 <pid> debuggerd的堆栈dump debuggerd是android的一个…

20240604将OK3588-C的核心板刷机Buildroot之后强制横屏

20240604将OK3588-C的核心板刷机Buildroot之后强制横屏 2024/6/4 17:13 viewproviewpro-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508/kernel/arch/arm64/boot/dts/rockchip$ grep dsi0 . -R ./Makefile:dtb-$(CONFIG_ARCH_ROCKCHIP) rk3568m-serdes-evb-display-dsi…

代码解读 | Hybrid Transformers for Music Source Separation[01]

一、背景 今天对Hybrid Transformer Demucs代码进行解读&#xff0c;目标&#xff1a;明确图c中各个模块对应的代码具体在工程的哪个地方。解读的代码是开源工程中的htdemucs.py。 具体的paper解读看这篇文章。 二、代码解读 算法整体流程&#xff1a;图c其实是从下往上看的&a…

快速入门C++正则表达式

正则表达式&#xff08;Regular Expression&#xff0c;简称 Regex&#xff09;是一种强大的文本处理工具&#xff0c;广泛用于字符串的搜索、替换、分析等操作。它基于一种表达式语言&#xff0c;使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。正则表达式不仅在…

堆盘子00

题目链接 堆盘子 题目描述 注意点 SetOfStacks应该由多个栈组成&#xff0c;并且在前一个栈填满时新建一个栈 解答思路 将多个栈存储到一个List中&#xff0c;当入栈时&#xff0c;如果List中最后一个栈容量已经达到cap&#xff0c;则需要新建一个栈&#xff0c;将元素推到…