首页 > 其他分享 >Pandas-入门

Pandas-入门

时间:2024-07-20 20:25:16浏览次数:9  
标签:入门 -- movie dfm Series print csv Pandas

Pandas

Pandas

"""
Pandas
    DataFrame: 可以把DataFrame看作由Series对象组成的字典, 其中key是列名, 值是Series
    Series: Series和Python中的列表类似, 但是Series中每个元素的数据类型必须相同
    没有行的数据结构:
        即使是行数据, 也会通过列的方式进行展示
"""

1.1 Series


"""
创建Series对象
    Series 是pandas中的最基本的数据结构对象, 是DataFrame的列对象或者行对象
    Series 本身具有行索引
    
    Series 是一种类似于一维数组的对象, 有两个部分组成
    1. values 一维数组的数据(numpy.ndarray类型)
    2. index 相关的数据行索引标签, 如果没有为数据指定索引, 于是自动创建一个 0 到 n-1 的整形索引
"""
import pandas as pd
import numpy as np

# 创建 numpy.ndarray 对象
n = np.array([1, 2, 3])
print(n)
print(type(n))

# 构建Series对象
s = pd.Series(data=n)
print(s)
print(type(s))

# 创建Series对象
s = pd.Series(["hello", 12])
print(s)
print(type(s[1]))

# 通过元祖创建Series对象
tuple = (1, 2, 3)
s = pd.Series(tuple)
print(s)

# 通过字典创建Series对象
# 其中 key 作为 Series 对象的索引值 value 作为Series对象的数据值
d = {"a": 1, "b": 2, "c": 3}
s = pd.Series(d)
print(s)

1.1.1 常用属性

"""
常用属性:
    loc   -- 使用索引值获取数据
    iloc  -- 使用行号获取数据
    dtype dtypes -- Series 内容的数据类型
    T            -- Series的转置矩阵
    shape        -- 数组的维度
    size         -- Series 中元素的数量
    values       -- Series 的数据值
    index        -- Series 的索引值
"""
# 读取 csv 文件
data = pd.read_csv('data/nobel_prizes.csv', index_col='id')
# 展示数据中的前 5 行 数据
print(data.head())

# 通过使用索引值获取数据
first_row = data.loc[1]
print(first_row) 

# 使用行号获取数据
first_row = data.iloc[1]
print(first_row) 

1.1.2 常用方法

"""
常用方法
    append                -- 连接两个或多个Series
    corr                  -- 计算与另一个Series的相关系数
    cov                   -- 计算与另一个Series的协方差
    describe              -- 计算常见统计量
    drop_duplicates       -- 返回去重之后的Series
    equals                -- 判断两个Series是否相同
    get_values            -- 获取Series的值,作用与values属性相同
    hist                  -- 绘制直方图
    isinSeries            -- 中是否包含某些值
    min                   -- 返回最小值
    max                   -- 返回最大值
    mean                  -- 返回算术平均值
    median                -- 返回中位数
    mode                  -- 返回众数
    quantile              -- 返回指定位置的分位数
    replace               -- 用指定值代替Series中的值
    sample                -- 返回Series的随机采样值
    sort_values           -- 对值进行排序
    to_frame              -- 把Series转换为DataFrame
    unique                -- 去重返回数组
    value_counts          -- 统计不同值数量
    keys                  -- 获取索引值
    head                  -- 查看前5个值
    tail                  -- 查看后5个值
"""
# 布尔类型索引
# 从 scientists.csv 数据集中,展示出大于 Age 列的平均值的具体值    
dfm = pd.read_csv('data/scientists.csv')
print(dfm)
print(dfm.head())

# 通过布尔值获取 大于 Age 列的平均值的具体值 元素
dfm[dfm['Age'] > dfm.Age.mean()] 

"""
series 的运算
    Series 与 数据类型变量计算时, 变量会与Series中每个元素进行计算
    两个 Series之间计算时, 索引相同的元素会进行计算, 索引值不同的元素的计算结果会用NaN进行填充
"""

2.1 DataFrame

"""
DataFrame
    DataFrame 是一个表格型数据结构, 包含任意多个Series
    DataFrame 是Pandas中最基本的数据结构对象 可以认为是一个二维数据表, 有行有列有索引
    DataFrame 许多属性和方法 与 Series 相同

"""
# 字典方式创建
dict_data = {
    'id': [1, 2, 3],
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35]
}
dfm = pd.DataFrame(data=dict_data)
print(dfm)
print(type(dfm))

# 通过index参数指定索引 columns 参数指定列的位置
dfm = pd.DataFrame(data=dict_data, index=['A', 'B', 'C'], columns=['id', 'name', 'age'])
print(dfm)

# 列表 + 元祖方式创建
list_data = [(1, '张飞', 18), (2, '关羽', 20), (3, '刘备', 22)]
dfm = pd.DataFrame(list_data, index=['A', 'B', 'C'], columns=['id', 'name', 'age'])
print(dfm)

2.1.1 基础属性 基本函数

"""
DataFrame 基础属性 基本函数
"""
# 加载数据集, 得到df对象
dfm = pd.read_csv('data/scientists.csv')

print('=============== 常用属性 ===============')
# 查看维度, 返回元组类型 -> (行数, 列数), 元素个数代表维度数
print(dfm.shape)
# 查看数据值个数, 行数*列数, NaN值也算
print(dfm.size)
# 查看数据值, 返回numpy的ndarray类型
print(dfm.values)
# 查看维度数
print(dfm.ndim)
# 返回列名和列数据类型
print(dfm.dtypes)
# 查看索引值, 返回索引值对象
print(dfm.index)
# 查看列名, 返回列名对象
print(dfm.columns)
print('=============== 常用方法 ===============')
# 查看前5行数据
print(dfm.head())
# 查看后5行数据
print(dfm.tail())
# 查看df的基本信息
dfm.info()
# 查看df对象中所有数值列的描述统计信息
print(dfm.describe())
# 查看df对象中所有非数值列的描述统计信息
# exclude:不包含指定类型列
print(dfm.describe(exclude=['int', 'float']))
# 查看df对象中所有列的描述统计信息
# include:包含指定类型列, all代表所有类型
print(dfm.describe(include='all'))
# 查看df的行数
print(len(dfm))
# 查看df各列的最小值
print(dfm.min())
# 查看df各列的非空值个数
print(dfm.count())
# 查看df数值列的平均值
print(dfm.mean())

2.1.2 索引相关操作

"""
DataFrame 索引相关操作
    Pandas 关于DataFrame和Series相关API中 参数有 inplace 的 默认值是 False
    即会返回对象的副本 不会对原始对象数据进行更改
    如果 设置 inplace=True 就会直接修改原来的数据, 但是该方法就没有返回值了
"""
# 读取文件, 不指定索引, Pandas会自动加上从0开始的索引
movie = pd.read_csv('data/movie.csv')  
movie.head()

# 设置 电影名 为索引列 不修改原始数据
new_movie = movie.set_index('movie_title')
new_movie.head()

# 如果加上 inplace=True, 则会修改原始的df对象
movie.set_index('movie_title', inplace=True)  
movie.head()    # 原始的数据并没有发生改变

# 取消之前设置的索引   这里 加上inplace, 就是直接修改 源数据
movie.reset_index(inplace=True) 
movie.head()

2.1.3 修改行名 和 列索引值

"""
DataFrame 修改行名 和 列索引值
    方式一 rename()函数, 可以对原有的行索引名 和 列名进行修改
    方式二 把 index 和 columns属性提取出来, 修改之后, 再赋值回去
"""
# 方式一 rename()函数, 可以对原有的行索引名 和 列名进行修改
movie = pd.read_csv('data/movie.csv', index_col='movie_title')
# 前5个行索引名
movie.index[:5]  

# 前5个列名
movie.columns[:5]  

# 修改 行索引名 和 列名
idx_rename = {'Avatar': '阿凡达', "Pirates of the Caribbean: At World's End": '加勒比海盗'}
col_rename = {'color': '颜色', 'director_name': '导演名'}

# 通过rename()函数, 对原有的行索引名 和 列名进行修改
movie.rename(index=idx_rename, columns=col_rename).head()

# 方式二 把 index 和 columns属性提取出来, 修改之后, 再赋值回去
movie = pd.read_csv('data/movie.csv', index_col='movie_title')

# 提取出 行索引名 和 列名, 并转成列表.
index_list = movie.index.tolist()
columns_list = movie.columns.tolist()

# 修改列表元素值
index_list[0] = '阿凡达'
index_list[1] = '加勒比海盗'

columns_list[0] = '颜色'
columns_list[1] = '导演名'

# 重新把修改后的值, 设置成 行索引 和 列名
movie.index = index_list
movie.columns = columns_list

# 查看数据
movie.head(5)

2.1.4 添加列

# 添加列
movie = pd.read_csv('data/movie.csv', index_col='movie_title')

# 方式一
# 通过 dfm[列名] = 值  的方式, 可以给df对象新增一列, 默认: 在df对象的最后添加一列
movie['has_seen'] = 0  

movie.head()    # 查看内容

# 方式二
# insert() 表示插入列   参数解释: loc:插入位置(从索引0开始计数), column=列名, value=值
# 总利润 = 总收入 - 总预算
movie.insert(loc=1, column='profit', value=movie['gross'] - movie['budget'])
movie.head()

2.1.5 删除列

# 删除列
# movie.drop('has_seen')  # 报错, 需要指定方式, 按行删, 还是按列删
movie.drop('has_seen', axis='columns', inplace=True)      # 按列删
# movie.drop('has_seen', axis=1, inplace=True)            # 按列删, 这里的1表示: 列

movie.drop('Avatar', axis='rows', inplace=True)           # 按行删除
# movie.drop('Avatar', axis=0, inplace=True)              # 按行删, 这里的0表示: 行
# 删除行
movie.reset_index(inplace=True)
print(movie.head())
print('*' * 30)
movie.drop([0,1], inplace=True)                    # 按行索引删
print(movie.head())

3.1 导入 导出 数据

"""
导出数据
"""
# 需求: 导出数据到 /root/output/...
# 细节: 要导出到的目的地目录, 必须存在, 即:  output目录必须存在
# 格式:  dfm.to_后缀名(路径)
# 准备原始df对象
dfm = pd.read_csv('data/scientists.csv')
dfm
# 2. 对上述的df做操作, 模拟: 实际开发中, 对df对象做处理
# 需求: 筛选出 年龄 大于 平均年龄的数据
new_dfm = dfm[dfm.Age > dfm.Age.mean()]
new_dfm
# 3. 把上述的df对象, 写出到目的地中
# pickle: 比较适合 存储中间的df数据, 即: 后续要频繁使用的df对象, 可以存储下来
# new_dfm.to_pickle('output/scientists_pickle.pkl')      # pickle文件的后缀名可以是: .p, .pkl, .pickle

# excel, csv等文件, 适合于: 存储最终结果
# 注意: 有三个包需要安装一下, 如果你读写excel文件, 但如果你用的是Anaconda, 已经有了, 无需安装
# new_dfm.to_excel('output/scientists.xls')                                 # 会把索引列也当做数据, 写出
# new_dfm.to_excel('output/scientists_noindex.xls', index=False, sheet_name='ai20')   # 不导出索引列, 且设置表名

# csv(用逗号隔开), tsv(用\t隔开), 适用于 数据共享, 整合等操作 
# new_dfm.to_csv('output/scientists.csv')                        # 会把索引列也当做数据, 写出
# new_dfm.to_csv('output/scientists_noindex.csv', index=False)     # 不导出索引列

# 如果每行数据的 各列值之间用逗号隔开是 csv, 用\t隔开是 tsv
new_dfm.to_csv('output/scientists_noindex.tsv', index=False, sep='\t')     # 不导出索引列

print('导出成功!')
"""
导入数据
"""
# pickle文件
# pd.read_pickle('output/scientists_pickle.pkl') 

# excel文件
# pd.read_excel('output/scientists.xls')              
# pd.read_excel('output/scientists_noindex.xls')      

# csv文件
# pd.read_csv('output/scientists.csv')                  
# pd.read_csv('output/scientists_noindex.csv')          

pd.read_csv('output/scientists_noindex.tsv', sep='\t')  

标签:入门,--,movie,dfm,Series,print,csv,Pandas
From: https://blog.csdn.net/h15366059/article/details/140576803

相关文章

  • kettle从入门到精通 第七十九课 ETL之kettle kettle读取数据库BLOB字段转换为文件
     上一课我们讲解了如何将文件以二进制流的方式写入数据库,本节课我们一起学习下如何将二进制数据读取为文件。 1、将二进制流转换为文件这里主要用到了步骤【文本文件输出】。表输入步骤从表中读取blob字段,java代码定义二进制流转换为文件的全路径,文本文件输出步骤根据全路径和......
  • kettle从入门到精通 第七十八课 ETL之kettle kettle将文件写入数据库BLOB字段
    前些日子一个小伙伴私聊我咨询如何将数据库中的BLOB字段读取为文件。帮他顺利读取文件之后我在想kettle肯定支持将文件写入数据库BLOB字段。今天先来一起学习下如何将文件以二进制流的方式写进数据库。 1、创建数据表,脚本如下:CREATETABLE`file`(`id`bigintNOTNULLA......
  • 强化学习入门
    原文:https://blog.csdn.net/v_JULY_v/article/details/128965854目录强化学习极简入门:通俗理解MDP、DPMCTC和Q学习、策略梯度、PPO第一部分RL基础:什么是RL与MRP、MDP1.1入门强化学习所需掌握的基本概念1.1.1什么是强化学习:依据策略执行动作-感知状态-得到奖励1.1.2RL与监督......
  • Unity入门之重要组件和API(4) : Screen
    Screen类主要处理屏幕相关的操作。1.静态属性1.1常用属性【设备分辨率】Resolutionresolution=Screen.currentResolution;print("设备分辨率宽:"+resolution.width+"高:"+resolution.height);【屏幕窗口的宽高】这里得到的是当前窗口的宽高,不是设备分辨率的宽......
  • JavaScript与DOM的奇妙探险:从入门到精通的实战笔记
    文章目录JavaScript基本说明特点两种使用方式在script中写使用script标签引入JS文件数据类型介绍特殊值运算符算数运算符赋值运算符逻辑运算符:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bbf5c150699845af837d3c45c926e941.png)条件运算符数组的定义基......
  • Java NIO 快速入门:Java 非阻塞 IO 编程详解
    一、NIO简介1.概述介绍:JavaNIO(NewInput/Output)是从Java1.4开始引入的一组新的IO库,旨在替代传统的阻塞式IO。NIO提供了更高效的IO操作,支持非阻塞模式和多路复用,适用于高并发场景。概述:NIO中通过Buffer作为缓存区,Channel作为数据通道来传输数据进行数据通讯,通过S......
  • 【软件测试】一篇入门软件测试
    目录一、测试理论1.1了解软件测试1.2测试常用分类按阶段划分代码可见度划分1.3测试流程1.4软件测试模型V模型W模型1.5 冒烟测试......
  • 零基础入门:创建一个简单的Python爬虫管理系统
    摘要:本文将手把手教你,从零开始构建一个简易的Python爬虫管理系统,无需编程基础,轻松掌握数据抓取技巧。通过实战演练,你将学会设置项目、编写基本爬虫代码、管理爬取任务与数据,为个人研究或企业需求奠定坚实基础。一、前言:数据之海,从何舀水?在这个信息爆炸的时代,数据如同海洋,而......
  • Java入门基础:Java中的标识符;Java常量与变量;Java基本数据类型;Java运算符
    一,Java标识符【1】标识符:读音 biaozhifu (注意是标zhi符,不是标shi符,“识”这个字是多音字,我也是才发现^_^,你呢?)【2】标识符是?     包,类,变量,方法.....等等,只要是起名字的地方,那个名字就是标识符。【3】标识符定义规范:  1.四个可以(组成部分):数字,字母,下划......
  • Python写表情包搜索工具(非常详细)零基础入门到精通,收藏这一篇就够了
    首先,我们导入了一些必要的库。requests库用于发送HTTP请求,json库用于处理JSON数据,tkinter库用于创建GUI界面,PIL库用于处理图像,io库用于在内存中读写数据。然后,我们定义了一个常量ITEMS_PER_PAGE,表示每页显示的图片和链接数量。接下来,我们定义了一个名为search_emoji的函数......