Python数据攻略-DataFrame的创建与基础特性

news2024/12/22 23:23:58

大家好,我是Mr数据杨,今天我带来的是一本既实用又有趣的Python教程笔记,主角是Pandas DataFrame。它就像《三国演义》中的诸葛亮,机智、实用,可以帮助我们轻松处理各种数据问题。

我们来看如何创建诸葛亮——这个DataFrame。就像诸葛亮的才华一样多元,我们有多种方式创建DataFrame。比如,使用字典来创建,宛如使用木牛流马,巧妙利用已有的资源。使用列表创建,像诸葛亮运用锦囊妙计一样,将多个元素巧妙组合。使用NumPy数组创建,这就像诸葛亮借东风一样,借用强大的NumPy库的力量。还可以通过文件读取创建,就像诸葛亮拿到天书一样,轻松获取大量信息。

诸葛亮之所以称霸三国,是因为他能准确获取和处理信息。我们可以检索索引和数据,就像诸葛亮洞察战况,深谙敌我之情况。将索引视为序列,就如同诸葛亮的“连环计”,将数据有序联结。同时,DataFrame可以轻松地将数据转为NumPy数组,就像诸葛亮轻易地将战术转换为战斗力。

而DataFrame的数据类型,正如诸葛亮的智谋,多种多样,可以随需应变。最后,我们可以知晓DataFrame的大小,就如同诸葛亮深思熟虑,准确评估战况。

文章目录

  • Pandas DataFrame
  • 创建 DataFrame
    • 使用 Dict 创建
    • 使用 List 创建
    • 使用 NumPy 数组创建
    • 文件读取创建
  • 检索索引和数据
    • 索引作为序列
    • 数据转为 NumPy 数组
    • 数据类型
    • DataFrame 大小

Pandas DataFrame

Pandas DataFrame 是包含以二维、行和列组织的数据、对应于行和列的索引的数据结构。

使用字典的方式创建DataFrame。

import pandas as pd

df = pd.read_excel("Romance of the Three Kingdoms 13/人物详情数据.xlsx")
df.head()

在这里插入图片描述
设定条件查询数据的前 N 行或者后 N 行内容。

df.head(2)

在这里插入图片描述

df.tail(2)

在这里插入图片描述

查看某列数据的话直接使用字典取值的方式获取即可。

name = df['名前']
name 

0      阿会喃
1       韋昭
2       伊籍
3       尹賞
4      尹大目
      ... 
852    卑弥呼
853    韓世忠
854    梁紅玉
855     范蠡
856     荀灌
Name: 名前, Length: 857, dtype: object

也可以像获取类实例的属性一样访问该列数据。

df.名前

0      阿会喃
1       韋昭
2       伊籍
3       尹賞
4      尹大目
      ... 
852    卑弥呼
853    韓世忠
854    梁紅玉
855     范蠡
856     荀灌
Name: 名前, Length: 857, dtype: object

Pandas DataFrame 的每一列都是一个 pandas.Series 实例,保存一维数据及其索引的结构。可以像使用字典一样获取对象的单个项目,Series 方法是使用其索引作为键。

name [10]
'袁胤'

可以使用 .loc[] 访问器访问整行数据。

df.loc[10]

在这里插入图片描述
label 对应的行10,其中包含对应行数据之外,还提取了相应列的索引,返回的行也是一个 pandas.Series 实例。

创建 DataFrame

分别使用不同的方式创建DataFrame,创建之前先要导入对应的三方库。

import numpy as np
import pandas as pd

使用 Dict 创建

data = {'x': [1, 2, 3], 'y': np.array([2, 4, 8]), 'z': 100}
pd.DataFrame(data)

   x  y    z
0  1  2  100
1  2  4  100
2  3  8  100

可以用 columns参数控制列的顺序,用index控制行索引的顺序。

pd.DataFrame(d, index=[100, 200, 300], columns=['z', 'y', 'x'])
       z  y  x
100  100  2  1
200  100  4  2
300  100  8  3

使用 List 创建

字典键是列索引,字典值是 DataFrame 中的数据值。

l = [{'x': 1, 'y': 2, 'z': 100},
     {'x': 2, 'y': 4, 'z': 100},
     {'x': 3, 'y': 8, 'z': 100}]

pd.DataFrame(l)
   x  y    z
0  1  2  100
1  2  4  100
2  3  8  100

还可以使用嵌套列表或列表列表作为数据值,并且创建时需要指明行、列索引。元组和列表创建的方式相同

l = [[1, 2, 100],
     [2, 4, 100],
     [3, 8, 100]]

pd.DataFrame(l, columns=['x', 'y', 'z'])
   x  y    z
0  1  2  100
1  2  4  100
2  3  8  100

使用 NumPy 数组创建

arr = np.array([[1, 2, 100],
                [2, 4, 100],
                [3, 8, 100]])

df_ = pd.DataFrame(arr, columns=['x', 'y', 'z'])
df_
   x  y    z
0  1  2  100
1  2  4  100
2  3  8  100

文件读取创建

可以在多种文件类型(包括 CSV、Excel、SQL、JSON 等)中保存和加载Pandas DataFrame 中的数据和索引。

先将生成的数据保存到不同的文件中。

import pandas as pd

data = {'名前': ['阿会喃', '韋昭', '伊籍', '尹賞', '尹大目'],
 '字': ['-', '弘嗣', '機伯', '-', '-'],
 '読み': ['-', 'コウシ', 'キハク', '-', '-'],
 '性別': ['男', '男', '男', '男', '男'],
 '生年': [190, 204, 162, 194, 211],
 '登場': [217, 223, 189, 213, 230],
 '没年': [225, 273, 226, 260, 270],
 '寿命': [36, 70, 65, 67, 60],
 '死因': ['不自然死', '不自然死', '自然死', '自然死', '自然死'],
 '父親': ['-', '-', '-', '-', '-'],
 '母親': ['-', '-', '-', '-', '-'],
 '相性': ['62', '131', '77', '72', '38'],
 '列伝': ['孟獲の配下。第三洞の元帥。\n【演義】諸葛亮の南蛮征圧で、張翼に襲撃されて捕らえられる。董荼那ともども、諸葛亮に解放されて心服するが、同じく解放されながらも服従しない孟獲の命で沙口の守備に派遣される。次の戦いで馬岱との対戦を避けた董荼那が孟獲に処罰されると、董荼那と結託して孟獲を捕らえ蜀軍に引き渡した。その後、再び釈放された孟獲が諸葛亮に心服したものと誤解し、孟獲に誘い出されて董荼那と共に殺された。\n【正史】記述なし。',
  '呉の幕僚。正史では、司馬昭の名を避けて、韋曜と記される。\n【演義】記述なし。\n【正史】太子・孫和の命で「博奕論」を著し、博奕(すごろく)が益体のない遊びだと論じた。孫亮が即位すると諸葛恪に推薦され、薛瑩、華覈らと共に「呉書」の編集に当たる。しかし、孫晧が即位すると「呉書」の編集方針を巡って孫晧と対立。下戸だったがむりやり酒を飲まされ、態度が反抗的だとして処刑された。華覈とは親交が篤く、華覈は最後まで韋昭の助命嘆願に奔走した。',
  '劉表の幕僚。後に劉備に仕える。\n【演義】劉表が劉備から贈られた的盧を返した時、的盧の凶相が乗り手に祟るという逸話を劉備に伝える。蔡瑁が劉備暗殺を測った時は劉備に危機を伝え逃亡させた。劉表が死に、後を継いだ劉琮が早々に降伏すると、劉備に仕え関羽と共に荊州を守る。荊州が呂蒙の攻撃を受けると馬良と共に救援要請のため成都に向かい、関羽が死ぬと成都に残った。その後、劉備に皇帝になるよう勧めた。\n【正史】使者としての機知、応対を孫権に感心された。諸葛亮、法正、劉巴、李厳らと蜀科(蜀の法律)を作った。',
  '天水の武将。魏に仕えた後、蜀に降る。\n【演義】姜維の友人。諸葛亮が天水を攻めた時、先に蜀に降伏していた姜維と連絡を取り合う。蜀軍が攻め寄せると同僚の梁緒と謀って城門を開き、蜀軍を招き入れた。\n【正史】諸葛亮が天水を攻めた時、天水太守の馬遵から異心ありと疑われる。馬遵が逃走したため、姜維、梁虔、梁緒と共に降伏。蜀の滅亡前に死んだ。',
  '大目は字。名は不詳。曹爽の腹心。\n【演義】曹爽が司馬懿に処刑された後、仇を討つために偽って司馬師の部下となる。友人の文欽が毌丘倹と共に反乱を起こした時、文欽に司馬師の死が近いことを知らせようとするが、その意図が伝わらず追い返された。\n【正史】少年の頃、曹氏の召使いとなり、そのまま皇帝の側に仕えた。'],
 '商業': [0, 1, 5, 0, 0],
 '農業': [0, 0, 4, 0, 1],
 '文化': [0, 0, 5, 0, 0],
 '訓練': [2, 0, 0, 0, 0],
 '巡察': [1, 0, 0, 0, 0],
 '説破': [0, 1, 5, 0, 0],
 '交渉': [0, 0, 5, 2, 0],
 '弁舌': [0, 0, 4, 1, 0],
 '人徳': [0, 0, 0, 0, 0],
 '威風': [0, 0, 0, 0, 0],
 '神速': [0, 0, 0, 0, 0],
 '奮戦': [1, 0, 0, 0, 0],
 '連戦': [0, 0, 0, 0, 0],
 '攻城': [0, 0, 0, 0, 0],
 '兵器': [0, 0, 0, 0, 0],
 '堅守': [0, 0, 0, 0, 0],
 '水連': [0, 0, 0, 0, 0],
 '一騎': [0, 0, 0, 0, 0],
 '豪傑': [0, 0, 0, 0, 0],
 '鬼謀': [0, 0, 0, 0, 0],
 '音声': ['無骨男', '丁寧男', '策士男', '丁寧男', '老獪男'],
 '武器': ['刀', '弓', '弓', '弓', '弓'],
 '性格': ['猪突', '豪胆', '冷静', '冷静', '小心'],
 '義理': ['普通', '重視', '重視', '普通', '普通'],
 '勇愛': ['重視', '普通', '軽視', '普通', '重視'],
 '才愛': ['軽視', '重視', '最重視', '重視', '重視'],
 '分類': ['武官', '文官', '文官', '文官', '文官'],
 '武具\n興味': ['なし', 'なし', 'なし', 'なし', 'なし'],
 '書物\n興味': ['なし', 'あり', 'あり', 'なし', 'なし'],
 '宝物\n興味': ['あり', 'なし', 'なし', 'あり', 'あり'],
 '酒\n興味': ['あり', 'なし', '普通', '普通', 'なし'],
 '物欲': ['強欲', '無欲', '無欲', '普通', '無欲']}

columns_name = ['名前', '字', '読み', '性別', '生年', '登場', '没年', '寿命', '死因', '父親', '母親', '相性',
       '列伝', '商業', '農業', '文化', '訓練', '巡察', '説破', '交渉', '弁舌', '人徳', '威風', '神速',
       '奮戦', '連戦', '攻城', '兵器', '堅守', '水連', '一騎', '豪傑', '鬼謀', '音声', '武器', '性格',
       '義理', '勇愛', '才愛', '分類', '武具\n興味', '書物\n興味', '宝物\n興味', '酒\n興味', '物欲'
]

df = pd.DataFrame(data=data,columns=columns_name)

df.to_csv('data.csv')
df.to_excel('data.xlsx')

检索索引和数据

创建 DataFrame 后可以进行一些检索、修改操作。

索引作为序列

df.index
RangeIndex(start=0, stop=5, step=1)

df.columns
Index(['名前', '字', '読み', '性別', '生年', '登場', '没年', '寿命', '死因', '父親', '母親', '相性',
       '列伝', '商業', '農業', '文化', '訓練', '巡察', '説破', '交渉', '弁舌', '人徳', '威風', '神速',
       '奮戦', '連戦', '攻城', '兵器', '堅守', '水連', '一騎', '豪傑', '鬼謀', '音声', '武器', '性格',
       '義理', '勇愛', '才愛', '分類', '武具\n興味', '書物\n興味', '宝物\n興味', '酒\n興味', '物欲'],
      dtype='object')

df.columns[0]
'名前'

用序列修改索引。

df.index = np.arange(10, 15)

df.index
Int64Index([10, 11, 12, 13, 14], dtype='int64')

df

在这里插入图片描述

数据转为 NumPy 数组

转化之后取值方式同List操作。

df.to_numpy()

array([['阿会喃', '-', '-', '男', 190, 217, 225, 36, '不自然死', '-', '-', '62',
        '孟獲の配下。第三洞の元帥。\n【演義】諸葛亮の南蛮征圧で、張翼に襲撃されて捕らえられる。董荼那ともども、諸葛亮に解放されて心服するが、同じく解放されながらも服従しない孟獲の命で沙口の守備に派遣される。次の戦いで馬岱との対戦を避けた董荼那が孟獲に処罰されると、董荼那と結託して孟獲を捕らえ蜀軍に引き渡した。その後、再び釈放された孟獲が諸葛亮に心服したものと誤解し、孟獲に誘い出されて董荼那と共に殺された。\n【正史】記述なし。',
        0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
        '無骨男', '刀', '猪突', '普通', '重視', '軽視', '武官', 'なし', 'なし', 'あり', 'あり',
        '強欲'],
       ......
       ['尹大目', '-', '-', '男', 211, 230, 270, 60, '自然死', '-', '-', '38',
        '大目は字。名は不詳。曹爽の腹心。\n【演義】曹爽が司馬懿に処刑された後、仇を討つために偽って司馬師の部下となる。友人の文欽が毌丘倹と共に反乱を起こした時、文欽に司馬師の死が近いことを知らせようとするが、その意図が伝わらず追い返された。\n【正史】少年の頃、曹氏の召使いとなり、そのまま皇帝の側に仕えた。',
        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        '老獪男', '弓', '小心', '普通', '重視', '重視', '文官', 'なし', 'なし', 'あり', 'なし',
        '無欲']], dtype=object)

数据类型

数据值的类型,也称为数据类型或 dtypes,决定了 DataFrame 使用的内存量,以及计算速度和精度水平。

查看数据类型。

df.dtypes

名前        objectobject
読み        object
性別        object
生年         int64
登場         int64
没年         int64
......

dtype: object

使用.astype() 更改数据类型。

df_ = df.astype(dtype={'生年': np.int32, '没年': np.int32})

df_.dtypes
名前        objectobject
読み        object
性別        object
生年         int32
登場         int64
没年         int32
......

dtype: object

DataFrame 大小

.ndim.size.shape分别返回维度数、每个维度上的数据值数和数据值总数。

df_.ndim
2

df_.shape
(5, 45)

df_.size
225

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/611913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实现UDP通信(socket接口函数扩展)

一、write/read到send/recv 函数原型: ussize_t send(int sockfd, const void *buf, size_t len, int flags);//发送 ussize_t recv(int sockfd, void *buf, size_t len, int flags);//接收 前三个参数同read/write一样; ussize_t read(int fd, voi…

2023CCPC河南省赛 VP记录

感觉现在的xcpc,风格越来越像CF,不是很喜欢,还是更喜欢多点算法题的比赛 VP银了,VP银也是银 感觉省赛都是思维题,几乎没有算法题,感觉像打了场大型的CF B题很简单没开出来,一直搞到最后&…

Android crash 流程详解(二):NE

源码基于:Android R 接上一篇博文:《Android crash 流程详解(一):JE》 0. 前言 在上一篇博文剖析了java layer exception 的处理流程,本文将继续剖析 Android crash 的另一部分,即 native 端的 crash,又称…

【JavaEE】网络编程之UDP套接字

目录 1、网络编程基础 2、UDP数据报套接字编程 2.1.DatagramSocket API(方法) 2.2、DatagramPacket API(方法) 2.3、InetSocketAddress API 3、基于UDP socket写一个回显服务器 3.1、服务器端 3.2 、客户端 3.3、完…

机器学习常识 21: 卷积神经网络

摘要: 卷积操作保留体现了空间相关性. 1. 卷积操作 图 1. 卷积操作 Valid 方式. 图 1 下平面标定的 3 3 3 \times 3 33 区域, 对应于个 3 3 3 \times 3 33 卷积, 这 9 9 9 个数对应着相乘, 然后相加, 获得了上平面标定的 1 1 1 个小区域的值. 注意这里不是矩阵的乘法. 卷…

《大数据技术与应用》课程实验报告|week12|实验8|Pig——高级编程环境 验证评估函数

目录 一、实验内容 二、实验目的 三、实验设备 四、实验步骤 步骤一 步骤二 步骤三 步骤四 步骤五 步骤六 步骤七 步骤八 步骤九 步骤十 步骤十一 步骤十二 步骤十三 步骤十四 步骤十五 步骤十六 五、实验结果 六、实验小结 一、实验内容 验证19.5节中的…

Apache网页的日志分割与优化

Apache网页的日志分割与优化 一、日志分割的作用二、rotatelogs 分割1.修改apache服务的主配置文件2.创建分割日志保存目录3.浏览器访问 三、AWStats 分析系统1.将安装AWStats 所需软件包传到/opt目录下2.安装 AWStats 软件包3.为要统计的站点建立配置文件4.修改自动生成的 aws…

电表的698通信协议

原文连接:https://blog.csdn.net/ss86655/article/details/109997891 该协议规定了用电信息的数据交换过程,一般用于主站与电能表之间、终端与电能表之间的数据交换,主站与终端一般用不同的客户机地址来区分。1、通信架构 有两种方向的数据…

linux系统中代码突然无法执行,没有权限访问文件,但是可以在文件管理器中查看文件

前言 这段时间遇到了一个非常离谱的问题,我的只要设计移动硬盘中数据的所有代码突然无法运行,我折腾了很久一直觉得是移动硬盘坏了,但拿到其他电脑上去是可以运动的。今天终于偶然发现了问题。 直接说结论: 移动硬盘的挂载点变了…

SQL-DML、DQL查询数据

SQL-DML、DQL查询数据 1 DML DML主要是对数据进行增(insert)删(delete)改(update)操作。 1.1 添加数据 给指定列添加数据 INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);给全部列添加数据 INSERT…

MySQL数据库性能优化技巧介绍

MySQL是目前最流行和广泛使用的开源关系型数据库之一,随着数据量的增长和访问负载的提高,优化数据库性能变得至关重要,以确保系统能够高效地处理大量的并发请求。本文将记录一些MySQL数据库性能优化的技巧,提高数据库的运行效率&a…

程序员——应届生毕业,竟有20k高薪岗位?!

马士兵优极限训练营让我在技术和个人能力上都有了很大的提升。在未来的职业生涯中,我会继续努力,不断学习和成长,为自己和社会做出更大的贡献 01 选择大数据 只因更有前景 我是计算机专业出身,但是在大学的时候我对大数据行业更…

vue3 ---- 递归组件生成menu菜单 路由守卫鉴权

目录 递归组件​ el-menu 父组件 子组件 路由 Vue路由守卫实现登录鉴权 全局守卫 路由独享的守卫 组件内的守卫 完整的导航解析流程 对于一些有规律的DOM结构,如果我们再一遍遍的编写同样的代码,显然代码是比较繁琐和不科学的,而且…

5个有效方法教你如何正确使用云渲染,防错必备!

随着技术的进步和计算能力的提升,云渲染成为了现代计算机图形学和动画制作中不可或缺的一环。无论是在电影、游戏还是建筑可视化等领域,渲染图像的质量和效率都对最终结果有着巨大的影响。然而,云渲染也面临着一些潜在的问题,如渲…

一文看懂B TREE和B+TREE数据结构实现过程及数据存储结构

概述 一文看懂B TREE和BTREE数据结构实现过程及数据存储结构 一、B tree数据结构实现过程 这里有一个陌生区关于 Max. Degree,这个你可以理解为阶,也可以理解为度,即B 树的阶数(一个节点存储的键的数量) 这里有一个陌生区关于…

简单上手!快速将另一个报表的页面添加到 FastReport .NET!

FastReport 是功能齐全的报表控件,可以帮助开发者可以快速并高效地为.NET,VCL,COM,ActiveX应用程序添加报表支持,由于其独特的编程原则,现在已经成为了Delphi平台最优秀的报表控件,支持将编程开…

ROS:古月居第一次作业(话题与服务编程、动作编程、TF编程)

一.话题与服务编程 话题与服务编程:通过代码新生一只海龟,放置在(5,5)点,命名为“turtle2”;通过代码订阅turtle2的实时位置并打印在终端;控制turtle2实现旋转运动; demo_turtle.l…

智能出行更安全,亚马逊云科技携手木卫四助汽车客户安全合规出海

木卫四(北京)科技有限公司在汽车网络安全领域拥有独特专业知识,其融合人工智能算法的安全检测引擎可以不依赖车辆中安装的代理软件,只需几周即可快速部署实施,是汽车网络安全领域的技术领先者。 在亚马逊云科技初创团…

消息中间件之ActiveMq安装

文章目录 前言安装下载地址安装 使用控制台调整配置文件 前言 2023年年中了,又遇到了老朋友activeMq,上次接触activeMq还是在15年的时候,系统中用到了这个消息中间件。 阔别8年之久,竟然又用到了这个老家伙! 安装 要…

【6.05 代随_48day】 打家劫舍、打家劫舍 II、打家劫舍 III

打家劫舍、打家劫舍 II、打家劫舍 III 打家劫舍1.方法图解步骤代码 打家劫舍 II1.方法代码 打家劫舍 III图解步骤代码 打家劫舍 力扣连接:198. 打家劫舍(中等) 1.方法 确定dp数组(dp table)以及下标的含义 dp[i]&am…