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…

useState和store的区别

useState 和 useStore 是 React 应用中用于管理数据状态的两种不同的 Hook。它们在功能和用途上有一些区别: useState useState 是 React 提供的一个 Hook,用于在函数组件中添加局部状态。每个 useState 调用都会返回一个数组,包含两个元素…

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…

电机启动器:变频驱动器故障的原因

变频驱动器 (VFD)是 一种电子电机控制器,用于调节同步或感应电机 的转速 并驱动电力行业的负载。VFD也称为变频器、逆变器驱动器、交流驱动器、可调频驱动器、可调速驱动器、微型驱动器或变速驱动器,其 功能是选择电压频率并在用于驱动电机之前改变它。 …

12年外贸人的肺腑之言

转自Vicky 大家好,作为一个有着12年外贸经验的老鸟,今天我要和大家分享一些宝贵的建议,这些建议可能会对你的外贸之路产生重大影响。拿好小本本,记好笔记,我们直接进入正题。 首先,如果你决心要在外贸领域…

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

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

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

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

Java2实用教程上机实践9,10,11

前言 大家好呀,大家肯定遇到过学校布置的作业不会做的情况吧?这个时候大量的网上找资料,找如何做这道题,为了帮助用Java2实用教程(耿祥义 张跃平主编)的学子们拿满平时分,这里整理出这本书中比…

数据集成赛道重回数据领域兵家“必争之地”!

作者 | 郭炜 导读:此前,《技术成熟度曲线2024》第一、二部分内容已发布,详见《「从ETL 到ELT,到 EtLT的趋势」》、《数据集成成熟度模型解读》。本文为报告的最后一篇,主要对数据集成技术进行趋势预测与总结&#xff0…

python的DataFrame和Series

Series、DataFrame 创建 pd.Series() pd.DataFrame() # 字典{列名:[值1,值2],} [[]] [()] numpy Pandas的底层的数据结构,就是numpy的数组 ndarray 常用属性 shape (行数,) (行数,列数) values → ndarray index 索引名 siz…

华为管理工程部的前世今生

我们经常讲管理是一项系统工程,但在企业实际的管理建设和改进中,往往又并没有把管理当作一项系统工程来对待,更没有通过持续的管理变革或业务变革(BT,Business Transformation)来打造这一系统工程&#xff…

磐石云pscc系统电话不能正常使用,或者接不到电话,什么情况?

磐石云PSCC系统电话无法正常使用或接不到电话可能会出现以下情况: 网络问题:可能是由于网络连接不稳定或网络设置问题导致系统电话功能无法正常工作。建议检查网络连接是否正常,确保网络稳定。 系统配置问题:可能是由于系统配置错…

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

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

Python 表达:探索语言艺术的深度与广度

Python 表达:探索语言艺术的深度与广度 Python,这门简洁而强大的编程语言,以其优雅的表达方式吸引着无数开发者。在Python的世界中,表达不仅关乎代码的执行,更是一种艺术。本文将分四个方面、五个方面、六个方面和七个…

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

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

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

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

BM25算法以及变种算法简介

深入理解TF-IDF、BM25算法与BM25变种:揭秘信息检索的核心原理与应用 原文链接: https://xie.infoq.cn/article/8b7232877d0d4327a6943e8ac BM25算法以及变种算法简介 Okapi BM25,一般简称 BM25 算法,在 20 世纪 70 年代到 80 年代…