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

Python数据分析 Pandas基本操作

Python数据分析 Pandas基本操作

一、Series基础操作

Series是pandas的基础数据结构,它可以用来创建一个带索引的一维数组,下面开始介绍它的基础操作

image-20240915093817434

1、创建Series

1)使用数据创建Series

import pandas as pd
pd.Series(10,20,30,40)

image-20240914224914178

2)使用列表创建:默认索引,s列表中内容,拷贝到Series元数组中

s = [1, 2, 3, 4]
s1.Series(s)

image-20240915094853730

3)使用字典创建:默认索引为字典的key值,字典的value成为Series对象的元数组

s = {'a':1,'b':2,'c':3,'d':4}
s1 = pd.Series(s)

image-20240915094918341

4)Series的索引操作,可以自定义索引的形式。

s = [1,2,3,4]
index = ['a','b','c','d']
s1 = pd.Series(s,index=index)

image-20240915094943904

整数:适合顺序和离散的标签。

浮点数:适合需要精确值的情况,但注意精度问题。

字符串:适合文本标签。

日期时间:适合时间序列数据,精确到日期和时间。

时间戳:提供更精确的时间标记。

分类:适合有限的类别集合,节省内存和计算。

布尔值:不常见,但适用于需要布尔逻辑的场景。

元组:用于多级索引(MultiIndex)或复杂的索引结构。

自定义对象:适合特殊需求的索引,只要实现了必要的比较和哈希方法。

2、pd.Series 构造函数的参数

1)data:
  • 描述: 用于构造 Series 的数据。可以是列表、数组、字典、标量等。

  • 类型: listarraydictscalar 等。

  • 示例:

    s1 = pd.Series([10, 20, 30])
    s2 = pd.Series({'a': 1, 'b': 2})
    s3 = pd.Series(5, index=['a', 'b', 'c'])
    

    image-20240914225449651

2)index:
  • 描述: 自定义 Series 的索引。如果不提供,默认使用整数索引(0, 1, 2, …)。

  • 类型: listarrayIndex

  • 示例:

    s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
    

    image-20240914225543025

3)dtype:
  • 描述: 指定 Series 的数据类型。如果不提供,pandas 会自动推断数据类型。

  • 类型: numpy.dtypestr

  • 示例:

    s = pd.Series([10, 20, 30], dtype='float64')
    

    image-20240914225616903

4)name:
  • 描述: 给 Series 一个名称,可以用于后续数据操作和可视化时的标签,在,name 可以帮助识别 Series 的来源或意义,特别是在处理多个 Series 时,能够更容易地跟踪它们的含义

  • 类型: str

  • 示例:

    s = pd.Series([10, 20, 30], name='s1')
    

    image-20240915092200808

5)copy:
  • 描述: 是否复制输入的数据。如果设置为 True为深拷贝,则会复制输入数据,默认为 False浅拷贝。

  • 类型: bool

  • 示例

    :

    s = [10, 20, 30]
    s1 = pd.Series(s, copy=True)
    s2 = pd.Series(s, copy=False)
    

    image-20240915091734469

  • 注意:copy参数只能在源数据是 Numpy对象Series对象中起到作用

image-20240915091826540

二、DataFrame基本操作

DataFramepandas 库中的一个核心数据结构,用于处理和分析二维的表格数据。它类似于数据库中的表格或者 Excel 中的工作表。每一列可以是不同的数据类型(例如整数、浮点数、字符串等)它的每一列基本上都是一个Series,而每一行代表一个记录。

1、DataFrame 的基本结构

  • 行(Rows):数据的每一行代表一个记录或实例。
  • 列(Columns):数据的每一列代表一个变量或特征。
  • 索引(Index):行的标签,用于识别每一行。
  • 列标签(Column Labels):列的标签,用于识别每一列。

2、创建DataFrame对象

1)使用数据创建
s = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

image-20240915101320230

2)使用列表创建
s = [[123,234,345],[456,567,667],[789,890,901]]
columns = ['身份id', '数字id', '人员id']
s1 = pd.DataFrame(s,columns=columns)
s1['身份id']

image-20240915102510057

在这里,使用了columns参数指定了每个列名字,这些列名也就是Series的name属性,可以通过这个series的name属性 去取出该列的数据例如:

image-20240915103006948

也可以去修改它的数据,例如:

image-20240915103208708

3)通过字典创建
s = {'身份id':[123,456,789],'数字id':[234,567,890],'人员id':[345,667,901]}
index=['张三','李四','王五']
s1 = pd.DataFrame(s,index=index)

image-20240915103956390

再次,使用了index参数,对DataFrame对象的索引进行了自定义,它的概念与Series的概念一样,也可以通过多维标签去访问或修改里面的元素,例如:

image-20240915104324152

第一个元素是列名、第二个元素的索引,

4)通过Series对象去创建
s1 = pd.Series([123,456,789],name='身份id',index=['张三','李四','王五'])
s2 = pd.Series([234,567,667],name='数字id',index=['张三','李2四','王五'])
s3 = pd.Series([789,890,901],name='人员id',index=['张三','李四','王五'])

s4 = pd.DataFrame([s1,s2,s3],axis=1)

image-20240915104930343

这里需要注意的是,如果Series对象中的index索引如果不一致,会导致多创建一个超出的列,因为SreiesDataFrame的光系是并集关系,

但是这里还会出现另一个问题,之前我们已经说了,SeriesDataFrame的列属性,但是在此处它却变成了DataFrame的行属性。

这是因为DataFrame 的构造方式和行为取决于你如何传递 Series 和使用的方法。实际上,Series 既可以被视为 DataFrame 的列,也可以被视为 DataFrame 的行,具体取决于构建 DataFrame 的方式。

  • Series 作为列

通常情况下,将 Series 传递给 DataFrame 构造函数时,如果每个 Series 是作为字典的值传递给 DataFrame,这些 Series 会被视为列。

# 创建 Series 对象
s1 = pd.Series([123, 456, 789], name='编号', index=['张三', '李四', '王五'])
s2 = pd.Series([234, 567, 667], name='数字id', index=['张三', '李四', '王五'])
s3 = pd.Series([789, 890, 901], name='人员id', index=['张三', '李四', '王五'])

# 使用 pd.DataFrame() 构造函数,Series 作为列
df = pd.DataFrame({
    '编号': s1,
    '数字id': s2,
    '人员id': s3
})
print(df)

image-20240915112645925

注意:在构造DataFrame对象时,它的列名以最后赋值的Series属性的name为最终结果,在上面例子的字典中,字典的key就可以看作是Series的name属性,它的赋值在Series构造函数之后,所以最终的结果就是身份id1,

  • Series 作为行

Series 被作为列表传递给 DataFrame 的构造函数时,它们会被默认视为 DataFrame 的行。每个 Seriesname 属性将成为 DataFrame 的行索引。

# 创建 Series 对象
s1 = pd.Series([123, 456, 789], name='编号', index=['张三', '李四', '王五'])
s2 = pd.Series([234, 567, 667], name='数字id', index=['张三', '李四', '王五'])
s3 = pd.Series([789, 890, 901], name='人员id', index=['张三', '李四', '王五'])

# 使用 pd.DataFrame() 构造函数,Series 作为行
df = pd.DataFrame([s1, s2, s3])

print(df)

image-20240915132137836

作为列:当 Series 作为字典的值传递给 DataFrame 构造函数时,Series 被视为 DataFrame 的列。

作为行:当 Series 被作为列表传递给 DataFrame 构造函数时,Series 被视为 DataFrame 的行。

除了以上办法可以使用Series对象构造一个DataFrame对象,其实还有一个更好用的方法,就是使用pandas.concat()函数方法,它可以用于在指定轴上对多个 DataFrameSeries 进行拼接的函数。它可以将多个对象沿着一个轴(行轴或列轴)合并成一个单一的对象。这个函数非常灵活,支持多种拼接方式,可以处理不同形状和索引的数据结构,后续在谈它。

3、DataFrame的构造函数

DataFrame的构造函数和Series的构造函数,其实都差不多,他们都是由这几个参数组成dataindexdtypenamecopy

参数说明:

  1. data:
    • 类型:各种类型(dict, list, Series, DataFrame, ndarray, DataFrame 等)
    • 说明:用于指定 DataFrame 的数据。可以是字典、列表、Series 列表、二维数组等。
  2. index:
    • 类型Indexarray-like
    • 说明:用于指定 DataFrame 的行索引。如果未提供,将使用默认的整数索引。
  3. columns:
    • 类型Indexarray-like
    • 说明:用于指定 DataFrame 的列名。如果未提供,将根据 data 自动生成。
  4. dtype:
    • 类型strnp.dtype
    • 说明:用于指定 DataFrame 的数据类型。如果未指定,DataFrame 将根据 data 自动推断数据类型。
  5. copy:
    • 类型bool
    • 说明:是否复制数据。默认为 False,即尽可能避免复制数据;设置为 True 时,则会复制数据。

http://www.kler.cn/a/308633.html

相关文章:

  • MQTT协议解析 : 物联网领域的最佳选择
  • 【学习】Fine-tuning知识汇总
  • WebGIS三维地图框架--Cesium
  • 树形dp总结
  • Java的dto,和多表的调用
  • 【ChatGPT】 如何让ChatGPT分析数据并得出结论
  • .NET 6.0 + WPF 使用 Prism 框架实现导航
  • Linux下编译Kratos
  • 如何动态获取路由上的参数
  • 最短路径算法
  • 详解QT元对象系统用法
  • webpack原理简述
  • java实现真值表代码(不完善)恳求大佬指导
  • 利用AI驱动智能BI数据可视化-深度评测Amazon Quicksight(三)
  • 使用 Visual Studio Code 配置 C++ 开发环境的详细指南
  • sqlx1.3.4版本的问题
  • 【MySQL】Windows下重启MySQL服务时,报错:服务名无效
  • 语言模型与人类反馈的深度融合:Chain of Hindsight技术
  • 主流日志框架Logback与Log4j2
  • 【TS】TypeScript配置详解【三】
  • HarmonyOS axios 拦截器处理token 及异常
  • js的书写位置和css的书写位置的区别?为什么要这样写?
  • dedecms(四种webshell姿势)
  • 微服务之间远程调用实现思路
  • pdf文件转图片,base64或保存到本地
  • django 通过地址访问本地文件