Pandas 基础

一、对Pandas库认识

pandas(panel data & data analysis),是基于 numpy(提供高性能的矩阵运算)专门用于数据分析的工具,是一个强大的分析结构化数据(表格数据)的工具集,能够用于数 据挖掘和数据分析,同时也提供数据清洗功能

1、DataFrame

name age group
stu0 张某 19 1
stu1 王某 20 1
stu2 李某 19 2
stu3 赵某 18 2

DataFrame 是 Pandas 中的一个表格型的数据结构,包含有一组有序的列,每列可以是 不同的值类型(数值、字符串、布尔型等),观察表格可以发现:表格有三部分组成,表头(列 索引)、行名称(行索引)、数据元素部分,numpy 如何表示表结构的数据,以及和 Dataframe 的区别,numpy 将数据部分、表头(列索引)、行索引单独存放为一个数组

创建 DataFrame 的三种形式

方式 1:逐个传入行索引、列索引和 数据元素

# 导包
import pandas as pd
import numpy as np

# dataframe结构 具有行索引、列索引、数据元素 ---二维数据

# 可以使用pd.DataFrame来创建df数据
# 1、可以将列表嵌套转化为df
df = pd.DataFrame(
    data=[['zs', 17, 182.5],
          ['ls', 18, 190.5],
          ['ww', 16, 173.0]],
    index=['stu_0', 'stu_1', 'stu_2'],
    columns=['name', 'age', 'hight']
)
print('df:\n', df)
print('df类型:\n', type(df))  # <class 'pandas.core.frame.DataFrame'>

方式二:借助字典

# 导包
import pandas as pd
import numpy as np
# 2、可以使用大字典来创建df
df = pd.DataFrame(
    data={
   
        'name': ['zs', 'ls', 'ww'],
        'age': [17, 18, 16],
        'hight': [173.0, 185.5, 190.0]
    },
    index=['stu0', 'stu1', 'stu2']
)
print('df:\n', df)
print('df:\n', type(df))  # <class 'pandas.core.frame.DataFrame'>

方式三:也可以将二维数组数据转化为DataFrame

# 导包
import pandas as pd
import numpy as np
# 3、也可以将二维数组转化为df
# # 先加载一个二维数组
fp = np.load('./lol_data.npz')
# 遍历获取key
# for k in fp:
#     print(k)
# 获取保存的数组
columns = fp['columns']
data = fp['data']
print('columns:\n', columns)
print('data:\n', data)
# 剔除掉重复的数据
data = np.unique(data, axis=0)
# 先构建一个index
index = ['index_' + str(i) for i in range(data.shape[0])]
print('index:\n', index)

# 转化为df
df = pd.DataFrame(
    data=data,
    columns=columns,
    index=index
)
print('df:\n', df)

2、Series

它是一种类似于一维数组的对象,是由一组数据(各种 NumPy 数据类型)以及一组与之相 关的数据标签(即索引)组成,仅由一组数据也可产生简单的 Series 对象,Series对象没有列索引

stu0 张某
stu1 王某
stu2 李某
stu3 赵某

**创建 Series:**可以由简单列表、一维数组转化而来

在 series 对象中,索引与元素之间存在一种映射关系,元素在 series 对象中的有序存 储是通过索引实现的,当传入字典创建 series 对象,可以通过指定索引的方式对 series 对象中的元素进行排序和过滤

# 导包
import pandas as pd
import numpy as np
# 2、通过一维数组、简单列表来转化生产
se = pd.Series(data=['zs', 'ls', 'ww'],index=['stu0', 'stu1', 'stu2'])
se = pd.Series(data=np.array(['zs', 'ls', 'ww']),
               index=['stu0', 'stu1', 'stu2'])
print('se:\n', se)
print('se:\n', type(se))

# 3、也可以通过小字典来生成
se = pd.Series(data={
   'zs': 79, 'ls': 90, 'ww': 95},
               index=['zs', 'ls', 'ww','zl'])
print('se:\n', se)
print('se:\n', type(se))

Series 和 DataFrame 的关系

获取 dataframe 中的一列数据,得到的数据类型为 Series,DataFrame 可以被看做是由 Series 组成的字典

# Series  ---
# 只有行索引、数据元素 ---没有列索引 -----只能是1维的
# 而且这个一维 指的是行维度
# # 1、获取姓名这一列
se = df['姓名']
print('se:\n', se)
print('se:\n', type(se))  # <class 'pandas.core.series.Series'>
二、DataFrame 属性及 Series 属性
函数 返回值 备注
values 元素 表的数据部分
index 索引 行索引/行名称
columns 列名 列名称/表头
dtypes 元素类型 表内元素类型
size 元素个数 表内元素个数
ndim 维度数 values
shape 数据形状(行列数目) 表的数据部分的形状

以一个学生信息表的 DataFrame 为例,来研究 DataFrame 属性

DataFrame 属性

代码实现:

import pandas as pd

# 创建一个df
df = pd.DataFrame(
    data=[['zs', 17, 178.5],
          ['ls', 18, 173],
          ['ww', 19, 178.5]],
    index=['stu0', 'stu1', 'stu2'],
    columns=['name', 'age', 'hight']
)
# 获取DataFrame属性
print('df:\n', df)
print('df的元素个数:\n', df.size)  # --->只计算真实元素,不计算行、列索引
print('df的形状:\n', df.shape)
print('df的维度:\n', df.ndim)

print('df的行索引:\n', df.index)  # 行索引名称
print('df的列索引:\n', df.columns)  # 列索引名称

print('df的数据元素:\n', df.values)
print('df的数据元素:\n', type(df.values))  # <class 'numpy.ndarray'>

print('df的元素类型:\n', df.dtypes)  # 返回的是df中每一列的数据类型

# print('df的元素类型:\n', df.dtype)  # 错误的。因为df可以存储不同的数据类型
# print('df的每个元素的占位大小\n', df.itemsize)  # 错误的,因为df可以存储不同的数据类型

Series 属性

其实 Series 和 DataFrame 的属性相差不大,与 DataFrame 相比,Series 没有 columns 属性,由于只有一列,且属性一致,因此存在 itemsize 属性

代码实现:

import pandas as pd

# 创建一个df
df = pd.DataFrame(
    data=[['zs', 17, 178.5],
          ['ls', 18, 173],
          ['ww', 19
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值