当前位置: 首页 > article >正文

Pandas学习入门一

1.什么是Pandas?

Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建,提供了高级数据结构数据操作工具,它是使Python成为强大而高效的数据分析环境的重要因素之一。

  • 一个强大的分析和操作大型结构化数据集所需的工具集
  • 基础是NumPy,提供了高性能矩阵的运算
  • 提供了大量能够快速便捷地处理数据的函数和方法
  • 应用于数据挖掘,数据分析
  • 提供数据清洗功能

2.DataFrame

DataFrame 是一个二维标签化数据结构,你可以将其想象为一个 Excel 电子表格或者 SQL 表,或者是一个字典类型的集合。

# 创建一个 DataFrame 对象,支持自定义数据、索引、列名和数据类型。
pd.DataFrame(data, index, columns, dtype, copy)
# index 行索引
# columns 列索引

2.1 行索引

import numpy as np
import pandas as pd# 1.数组、列表或元组构成的字典构造dataframe
# 构造一个字典
data = {'A': [1, 2, 3, 4],'B': (5, 6, 7, 8),'C': np.arange(9, 13)
}# 构造dataframe
frame = pd.DataFrame(data)
print(frame)
print(type(frame))
# index 查看行属性
print("行属性:---", frame.index)
# #3.字典构成的字典构造dataframe
# 字典嵌套
data1 = {"a": {"apple": 3.6, "banana": 5.6},"b": {"apple": 3, "banana": 5},"c": {"apple": 3.2}
}
print(data1)
pd2 = pd.DataFrame(data1)
print(pd2)

series 构成字典构成 dataframe

# series 构成字典构成 dataframe
pd1 = pd.DataFrame({"a": pd.Series(np.arange(3)),"b": pd.Series(np.arange(3, 5))
})
print("---", pd1)

3.DataFrame的基本使用

3.1 .T转置

# DataFrame
pd5 = pd.DataFrame(np.arange(9).reshape(3,3),index=['a','c','b'],columns=['A','B','C'])
print(pd5)
# 和numpy一样进行转置   行和列
pd5.T

3.2 行索引

# index属性查看行索引
frame.index
# 指定行索引
frame = pd.DataFrame(data,index=['a','b','c','d'])
print(frame)

3.3 列索引

# columns属性查看列索引
frame.columns
# 指定列索引
frame = pd.DataFrame(data,index=['a','b','c','d'],columns=['B','A','C','D'])
frame

3.4 Series构成的字典构造dataframe

pd1 = pd.DataFrame({'a':pd.Series(np.arange(3)),'b':pd.Series(np.arange(3,5))})print(pd1)

3.4字典嵌套

#3.字典构成的字典构造dataframe
#字典嵌套
data1 = {'a':{'apple':3.6,'banana':5.6},'b':{'apple':3,'banana':5},'c':{'apple':3.2}
}
pd2 = pd.DataFrame(data1)
print(pd2)

3.5 列表类

2D ndarray 构造dataframe

# 构造二维数据对象
arr1 = np.arange(12).reshape(4,3)
print(arr1)
frame1 = pd.Dataframe(arr1)
print(frame1)

字典构成的列表构造dataframe

#2 字典构成的列表构造dataframe
l1 = [{'apple':3.6,'banana':5.6},{'apple':3,'banana':5},{'apple':3.2}]
pd3 = pd.DataFrame(l1)
print(pd3)

Series构成的列表构造dataframe

#3 Series构成的列表构造dataframe
l2 = [pd.Series(np.random.rand(3)),pd.Series(np.random.rand(2))]
pd4 = pd.DataFrame(l2)
print(pd4)

4.Series

1.Series介绍

2.创建方式

1.通过list创建

import numpy as np
import pandas as pd
# 1.通过list创建
s1 = pd.Series([1,2,3,4,5])
print(s1)

2.通过数组创建

# 2.通过数组创建
import numpy as np
import pandas as pd
arr1 = np.arange(1,6)
s2 = pd.Series(arr1) 
print(s2)
# 索引  索引默认0开始的整型序列    
# 索引长度和数据长度一致
s3 = pd.Series(arr1,index=['a','b','c','d','e'])
print(s3)
# 查看值
print(s3.values)
print(s3.index)  # 索引对象

3.通过字典创建

# 3 通过字典创建
dict = {'name':'姚明','age':18,'class':'二班'}
s4 = pd.Series(dict,index=['age','class','name','sex'])
print(s4)

3.Series基本使用

3.1检查缺失值

s4.isnull()   # 判断是否为空
s4.notnull()   # 判断是否为不为空
# 3.2 通过索引获取数据
print(s4.index)
print(s4.values)
# 下标  负号索引支持
s4[0]
# 标签名
s4['age']
# 选取多个
s4[[1,3]]
s4[['name','age']]
# 切片
s4[1:4] 
s5 = s4['name':'age':-1]  # 标签切片  包含末端数据   顺序
s3[s3>3]
# 索引与数据对应关系不会被运算结果影响
s3 + 2
# index
# values
# name属性
s3.name = 'temp'  # 对象名
s3.index.name = 'year' #  对象索引名s3
s3

5.pandas链接数据库

默认显示行数会压缩

1.读取mysql数据

# 设置显示的最大行数为None(无限制)
pd.set_option('display.max_rows', None)# 设置显示的最大列数为None(无限制)
pd.set_option('display.max_columns', None)
# 设置宽度,以便更宽的屏幕可以展示更多内容
pd.set_option('display.width', 1000)

也可以通过

# 查看最后五行数据
df.tail(5)
# 查看前五行数据
df.head(5)
"""
@Time    : 2025/5/22 16:13
@Author  : white.tie
@File    : 03mysql.py
@Desc    : 读取mysql中的数据
"""import pandas as pd
from sqlalchemy import create_engineimport pandas as pd# 设置显示的最大行数为None(无限制)
pd.set_option('display.max_rows', None)# 设置显示的最大列数为None(无限制)
pd.set_option('display.max_columns', None)
# 设置宽度,以便更宽的屏幕可以展示更多内容
pd.set_option('display.width', 1000)# 密码中的@需要转义为%40
engine = create_engine('mysql+pymysql://spider:zzwl%402024@192.168.0.103:3307/spider')
sql = """select * from ware_price_202502 limit 100
"""
df = pd.read_sql(sql,engine)
print(df)
df.to_excel('output.xlsx', index=False)

2.将数据写入Mysql

frame1.to_sql('ware_price_aaa',engine,index=False)
sql = """select * from ware_price_202502 limit 100
"""
df = pd.read_sql(sql,engine)
# print(df)
# df.to_excel('output.xlsx', index=False)
frame1 = df.head(3)
result = frame1["raw_defect_url"]
# print(result[0])
frame1["raw_defect_url"][0] = result[0].replace("ahs-creative.oss-cn-shanghai","ali.oss-cn-hangzhou")
print(frame1)
frame1.to_sql('ware_price_aaa',engine,index=False)
print("ok")

其中to_sql默认会创建新表,如果追加可以使用

frame1.to_sql('ware_price_aaa',engine,index=False, if_exists="append")

6.数据清洗

1.处理缺失数据

  • pd.fillna()

  • pd.dropna()

在这里插入图片描述

2.数据转换

2.1 处理重复数据

duplicated()返回布尔型Series表示每行是否为重复行

示例代码:

import numpy as np
import pandas as pddf_obj = pd.DataFrame({'data1': ['a'] * 4 + ['b'] * 4,'data2': np.random.randint(0, 4, 8)}
)
print(df_obj)
print("----")
# duplicated()返回布尔型Series表示每行是否为重复行
print(df_obj.duplicated())

2.2 利用函数或映射进行数据转换

根据map传入的函数对每行或每列进行转换

示例代码:

ser_obj = pd.Series(np.random.randint(0,10,10))
print(ser_obj)print(ser_obj.map(lambda x : x ** 2))

2.3 替换值

replace根据值的内容进行替换
# 单个值替换单个值
print(ser_obj.replace(1, -100))# 多个值替换一个值
print(ser_obj.replace([6, 8], -100))# 多个值替换多个值
print(ser_obj.replace([4, 7], [-100, -200]))

3. 字符串操作

3.1 字符串方法

请添加图片描述

请添加图片描述

3.2 正则表达式方法

请添加图片描述

3.3 pandas字符串函数:

请添加图片描述

"""
@Time    : 2025/5/26 13:45
@Author  : white.tie
@File    : 06str_alter.py
@Desc    : 
"""
import pandas as pd
if __name__ == '__main__':str_ = pd.Series(["AAA ","Aa B","a Aa"," aaa"])print(str_.str.lower())print(str_.str.len())   # 计算字符串长度str_strip = str_.str.rstrip()    # 去除右边空格print(str_strip)print(str_strip.str.len())str_lstrip = str_.str.lstrip()    # 去除左边空格print(str_lstrip)print(str_lstrip.str.len())

4.重塑

1. stack

  • 将列索引旋转为行索引,完成层级索引
  • DataFrame->Series
import numpy as np
import pandas as pddf_obj = pd.DataFrame(np.random.randint(0,10, (5,2)), columns=['data1', 'data2'])
print(df_obj)stacked = df_obj.stack()
print(stacked)

结果如下

   data1  data2
0      4      6
1      8      2
2      1      3
3      1      6
4      6      5
0  data1    4data2    6
1  data1    8data2    2
2  data1    1data2    3
3  data1    1data2    6
4  data1    6data2    5
dtype: int32

2.unstack

  • 将层级索引展开
  • Series->DataFrame
  • 默认操作内层索引,即level=-1

示例代码:

# 默认操作内层索引
print(stacked.unstack())# 通过level指定操作索引的级别
print(stacked.unstack(level=0))

运行结果:

# print(stacked.unstack())data1  data2
0      7      9
1      7      8
2      8      9
3      4      1
4      1      2# print(stacked.unstack(level=0))0  1  2  3  4
data1  7  7  8  4  1
data2  9  8  9  1  2

7.数据聚合与分组

  • 什么是分组聚合?如图:

    请添加图片描述

  • groupby:(by=None,as_index=True)

    by:根据什么进行分组,用于确定groupby的组

as_index:对于聚合输出,返回以组便签为索引的对象,仅对DataFrame

import pandas as pd
df1 = pd.DataFrame({'fruit':['apple','banana','orange','apple','banana'],'color':['red','yellow','yellow','cyan','cyan'],'price':[8.5,6.8,5.6,7.8,6.4]})
type(df1.groupby('fruit'))

聚合

#Groupby对象具有上表中的聚合方法#根据fruit来求price的平均值
df1['price'].groupby(df1['fruit']).mean()
fruit
apple     8.15
banana    6.60
orange    5.60
Name: price, dtype: float64     
#或者
df1.groupby('fruit')['price'].mean()#as_index=False
df1.groupby('fruit',as_index=False)['price'].mean()fruit    price
0    apple    8.15
1    banana    6.60
2    orange    5.60"""
如果我现在有个需求,计算每种水果的差值,
1.上表中的聚合函数不能满足于我们的需求,我们需要使用自定义的聚合函数
2.在分组对象中,使用我们自定义的聚合函数
"""
#定义一个计算差值的函数
def diff_value(arr):return arr.max() - arr.min()
#使用自定义聚合函数,我们需要将函数传递给agg或aggregate方法,我们使用自定义聚合函数时,会比我们表中的聚合函数慢的多,因为要进行函数调用,数据重新排列
df1.groupby('fruit')['price'].agg(diff_value)
fruit
apple     0.7
banana    0.4
orange    0.0
Name: price, dtype: float64
http://www.lryc.cn/news/2392263.html

相关文章:

  • 基于Piecewise Jerk Speed Optimizer的速度规划算法(附ROS C++/Python仿真)
  • 关于 JavaScript 版本、TypeScript、Vue 的区别说明, PHP 开发者入门 Vue 的具体方案
  • 中断和信号详解
  • STM32八股【10】-----stm32启动流程
  • 游戏引擎学习第312天:跨实体手动排序
  • 智警杯备赛--数据库管理与优化及数据库对象创建与管理
  • MySQL 在 CentOS 7 环境下的安装教程
  • K8S集群主机网络端口不通问题排查
  • 【Elasticsearch】retry_on_conflict
  • Android Cameara2 + MediaRecorder 完成录像功能
  • python打卡day39
  • 3.8.5 利用RDD统计网站每月访问量
  • 尚硅谷redis7 49-51 redis管道之理论简介
  • Spring Boot + MyBatis-Plus实现操作日志记录
  • JavaScript入门基础篇-day03
  • Leetcode-5 好数对的数目
  • openEuler安装MySql8(tar包模式)
  • Opencv实用操作6 开运算 闭运算 梯度运算 礼帽 黑帽
  • 基于python,html,flask,echart,ids/ips,VMware,mysql,在线sdn防御ddos系统
  • Git:现代软件开发的基石——原理、实践与行业智慧·优雅草卓伊凡
  • NLua性能对比:C#注册函数 vs 纯Lua实现
  • 【计算机网络】第2章:应用层—Web and HTTP
  • HarmonyOS 5 应用开发导读:从入门到实践
  • 大数据治理:分析中的数据安全
  • 数字孪生技术赋能西门子安贝格工厂:全球智能制造标杆的数字化重构实践
  • 国内高频混压PCB厂家有哪些?
  • 【图像处理基石】立体匹配的经典算法有哪些?
  • day12 leetcode-hot100-19(矩阵2)
  • 将Java应用集成到CI/CD管道:从理论到生产实践
  • 密钥管理系统在存储加密场景中的深度实践:以TDE透明加密守护文件服务器安全