Python数据分析 Pandas基本操作

Python数据分析 Pandas基本操作

一、Series基础操作

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

1、创建Series

1)使用数据创建Series

复制代码
import pandas as pd
pd.Series(10,20,30,40)

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

python 复制代码
s = [1, 2, 3, 4]
s1.Series(s)

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

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

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

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

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

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

字符串:适合文本标签。

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

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

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

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

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

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

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

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

  • 类型 : listarraydictscalar 等。

  • 示例:

    python 复制代码
    s1 = pd.Series([10, 20, 30])
    s2 = pd.Series({'a': 1, 'b': 2})
    s3 = pd.Series(5, index=['a', 'b', 'c'])
2)index:
  • 描述 : 自定义 Series 的索引。如果不提供,默认使用整数索引(0, 1, 2, ...)。

  • 类型 : listarrayIndex

  • 示例:

    python 复制代码
    s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
3)dtype:
  • 描述 : 指定 Series 的数据类型。如果不提供,pandas 会自动推断数据类型。

  • 类型 : numpy.dtypestr

  • 示例:

    python 复制代码
    s = pd.Series([10, 20, 30], dtype='float64')
4)name:
  • 描述 : 给 Series 一个名称,可以用于后续数据操作和可视化时的标签,在,name 可以帮助识别 Series 的来源或意义,特别是在处理多个 Series 时,能够更容易地跟踪它们的含义

  • 类型 : str

  • 示例:

    python 复制代码
    s = pd.Series([10, 20, 30], name='s1')
5)copy:
  • 描述 : 是否复制输入的数据。如果设置为 True为深拷贝,则会复制输入数据,默认为 False浅拷贝。

  • 类型 : bool

  • 示例

    :

    python 复制代码
    s = [10, 20, 30]
    s1 = pd.Series(s, copy=True)
    s2 = pd.Series(s, copy=False)
  • 注意:copy参数只能在源数据是 Numpy对象Series对象中起到作用

二、DataFrame基本操作

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

1、DataFrame 的基本结构

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

2、创建DataFrame对象

1)使用数据创建
python 复制代码
s = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
2)使用列表创建
python 复制代码
s = [[123,234,345],[456,567,667],[789,890,901]]
columns = ['身份id', '数字id', '人员id']
s1 = pd.DataFrame(s,columns=columns)
s1['身份id']

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

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

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

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

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

4)通过Series对象去创建
python 复制代码
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)

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

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

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

  • Series 作为列

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

python 复制代码
# 创建 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)

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

  • Series 作为行

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

python 复制代码
# 创建 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)

作为列 :当 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 时,则会复制数据。
相关推荐
费弗里3 小时前
Python全栈应用开发利器Dash 3.x新版本介绍(1)
python·dash
李少兄9 天前
解决OSS存储桶未创建导致的XML错误
xml·开发语言·python
就叫飞六吧9 天前
基于keepalived、vip实现高可用nginx (centos)
python·nginx·centos
Vertira9 天前
PyTorch中的permute, transpose, view, reshape和flatten函数详解(已解决)
人工智能·pytorch·python
学Linux的语莫9 天前
python基础语法
开发语言·python
匿名的魔术师9 天前
实验问题记录:PyTorch Tensor 也会出现 a = b 赋值后,修改 a 会影响 b 的情况
人工智能·pytorch·python
Ven%9 天前
PyTorch 张量(Tensors)全面指南:从基础到实战
人工智能·pytorch·python
mahuifa9 天前
PySide环境配置及工具使用
python·qt·环境配置·开发经验·pyside
大熊猫侯佩9 天前
ruby、Python 以及 Swift 语言关于 “Finally” 实现的趣谈
python·ruby·swift
19899 天前
【Dify精讲】第19章:开源贡献指南
运维·人工智能·python·架构·flask·开源·devops