Pandas 常见方法(0)-pandas 基础数据结构

说明:本blog基于python3版本, pandas 1.3.5, numpy1.22.0


前言

本文主要介绍pandas 的基础数据结构, Series和 DataFrame 及索引在两种数据结构中的作用

一、Series 数据结构

Series是一维的数组型对象,它由两部分组成:索引(也称为数据标签,index) 和 值序列(索引所对应的数据)

【注:默认索引为从0到N-1,N代表值序列的长度】

Series比较常见的有如下五种方法:
1.1 获得索引的方法:Series类型数据.index, 返回一个Index类型对象
1.2 获得值的方法:Series类型数据.values, 返回一个ndarray类型对象

我们着重介绍一下生成Series类型数据的方法(共三种):字典法 、列表法 和 ndarray数组法

比如我们想要生成一个长度为5的Series, 这个Series的index为[0,1,2,3,4], value 为[“a”,“b”,“c”,“d”,“e”],我们使用两种方法;
使用字典法,代码如下,

import pandas as pd
import numpy as np

ser_list = ["a","b","c","d","e"] 
ser_dic = {0:"a", 1:"b", 2:"c",3:"d",4:"e"}
ser_np = np.array(["a","b","c","d","e"] )

ser_list = pd.Series(ser_list)
ser_dic = pd.Series(ser_dic)
ser_np = pd.Series(ser_np, index = [0,1,2,3,4])

print(("Series data made by list is \n{}").format(ser_list))
print(("Series data made by dict is \n{}").format(ser_dic))
print(("Series data made by numpy is \n{}").format(ser_np))

结果如下,

Series data made by list is 
0    a
1    b
2    c
3    d
4    e
dtype: object
Series data made by dict is 
0    a
1    b
2    c
3    d
4    e
dtype: object
Series data made by numpy is 
0    a
1    b
2    c
3    d
4    e
dtype: object

当然,如果我们想改变上边的索引,可以使用 Series.index = list形式的索引
比如,我想改变所有位置索引为 [“aa”,“bb”,“vv”,“cc”,“qq”]
我可以使用如下方法:
【注意:使用index方法直接赋值改变索引时,新的索引值个数必须与原Series的索引值个数相等!!!否则,报错】

ser_list.index = ["aa","bb","vv","cc","qq"]
print(ser_list)

结果如下,

aa    a
bb    b
vv    c
cc    d
qq    e
dtype: object

二、DataFrame 数据结构

DataFrame是二维的数组型对象,它由两部分组成:索引(包括行索引和列索引) 和 值序列(索引所对应的数据)DataFrame是按列形成的,不同列的值的数据类型可以不同

生成DataFrame类型数据与Series相同,主要有三种方法:等长字典法,等长列表法,二维ndarray数组法

比如, 我们想生成一个行索引为 [0,1,2,3,4],列索引为 [“11”,“22”]的二维数组,分别使用三种方法实现
代码如下,

import pandas as pd
import numpy as np

DF_list = [["a1","a2"],["b1","b2"],["c1","c2"],["d1", "d2"],["e1","e2"]]
DF_dic = {"11":["a1","b1","c1","d1","e1"], "22":["a2","b2","c2","d2","e2"]}
DF_np = np.array([["a1","a2"],["b1","b2"],["c1","c2"],["d1", "d2"],["e1","e2"]])

DF_list = pd.DataFrame(DF_list, columns = ["11","22"], index = [0,1,2,3,4])
DF_dic = pd.DataFrame(DF_dic)
DF_np = pd.DataFrame(DF_np, columns = ["11","22"])

print(("DataFrame data made by list is \n{}").format(DF_list))
print(("DataFrame data made by dict is \n{}").format(DF_dic))
print(("DataFrame data made by numpy is \n{}").format(DF_np))

结果如下,

DataFrame data made by list is 
   11  22
0  a1  a2
1  b1  b2
2  c1  c2
3  d1  d2
4  e1  e2
DataFrame data made by dict is 
   11  22
0  a1  a2
1  b1  b2
2  c1  c2
3  d1  d2
4  e1  e2
DataFrame data made by numpy is 
   11  22
0  a1  a2
1  b1  b2
2  c1  c2
3  d1  d2
4  e1  e2

【注:使用等长字典法时,可以使用两层字典嵌套的形式;外层字典键值对应列索引,内层字典键值对应行索引】

我们也可以调整各列的顺序,
比如把上边的DF_list的11 和 22换位,再增加一个33列

DF_list = pd.DataFrame(DF_list, columns = ["22","11","33"])

结果如下,

   22  11  33
0  a2  a1 NaN
1  b2  b1 NaN
2  c2  c1 NaN
3  d2  d1 NaN
4  e2  e1 NaN

由此可见,22列和11列对换了顺序,同时因为33列没有值,我们用Nan值填充。

另外,我们还可以取出11列,形成一个新的Series数据
取列,与Series类型数据相同,DataFrame类型数据[“列索引”]
【注:取出的列是DataFrame的“视图”,不是copy】

DF_22 = DF_list["22"]
print(DF_22)

结果如下,

0    a2
1    b2
2    c2
3    d2
4    e2
Name: 22, dtype: object

取行,DataFrame类型数据.loc[“行索引”]
比如取行索引为2的数据,返回一个Series类型数据

DF_2 = DF_list.loc[2]
print(DF_2)

结果如下,

11    c1
22    c2
Name: 2, dtype: object

修改列值,DataFrame类型数据[“列索引”] = 标量值/数组
【注:如果是数组,那么数组长度必须与列长度相等,否则报错!!!】
比如修改33列的值为 [“h”,1,“p”,“z”,“o”]

DF_list["33"] = ["h",1,"p","z","o"] 
print(DF_list)

结果如下,

   22  11 33
0  a2  a1  h
1  b2  b1  1
2  c2  c1  p
3  d2  d1  z
4  e2  e1  o

三、索引对象的不可更改性

索引对象的不可更改性是指对索引对象某个元素的直接更改是不可以的,但是可以对整体索引进行二次赋值!!!


总结

写在最后,学pandas请关注Efred.D

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Efred.D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值