[数据处理与分析] Pandas 中的 DataFrame对象
DataFrame对象的使用
- 创建
- 接收一个字典
- 接收一个列表
- 一维列表
- 字典列表
- 二维列表
- 查询
- 获取某一列的所有记录
- 获取某一列记录的逻辑索引
- 根据逻辑索引获取指定的一整条横向记录
- 获取指定列和行的元素(先列后行)
- 根据逻辑索引获取指定的列记录
- 获取前几行记录
- 获取前几行记录
- 根据列 降序排序后, 获取前几行记录
- 根据列 升序排序后, 获取前几行记录
- 将每一行记录和索引打包成一个元组放入一个迭代器中
- 修改
- 新增一行
创建
接收一个字典
In [1]: import pandas as pdIn [2]: dic1 = {"name": ["张三", "李四"], "age": [22, 18], "gender": ["男", "女"]}In [3]: df1 = pd.DataFrame(dic1)In [4]: df1
Out[4]:name age gender
0 张三 22 男
1 李四 18 女
当接受一个字典作为参数时, 字典的keys会作为表格的列标签, 表格的记录索引index (也就是横标签) 默认从0开始自增, keys对应的values会在相应的列标签下排成一列
字典中至少有一个key对应的value是列表, 并且所有出现的列表都必须是相同长度
In [5]: dic1_test = {"name": "张三", "age": 22, "gender": "男"}In [6]: df1_test = pd.DataFrame(dic1_test)ValueError: If using all scalar values, you must pass an indexIn [7]: dic1_test2 = {"name": ["张三", "李四"], "age": 22, "gender": ["男"]}In [8]: df1_test2 = pd.DataFrame(dic1_test2)ValueError: arrays must all be same length
表格的index(也就是行数)默认是列表的长度, 如果字典的values中没有列表, 则必须人为指定index
index 是一个列表类型, 里面存放行标签, 标量的values会被自动重复相应的次数(列表的长度)
In [10]: df1_test3 = pd.DataFrame(dic1_test, index=["a", 1, [1]])In [11]: df1_test3 Out[11]:name age gender a 张三 22 男 1 张三 22 男 [1] 张三 22 男
values可以为空列表, 这样的话, 表格为空, 只有列标签, index为[]
In [12]: dic1_test4 = {"name": "张三", "age": 22, "gender": []}In [13]: df1_test4 = pd.DataFrame(dic1_test4)In [14]: df1_test4 Out[14]: Empty DataFrame Columns: [name, age, gender] Index: []
接收一个列表
一维列表
- 接收一个一维列表作为参数时, 列标签 和 行标签 都是从0开始自增.
- 每一个元素作为一条横向记录 (共同组成一个列向量)
In [19]: arr = ["张三", 22, "男"]In [20]: df2 = pd.DataFrame(arr)In [21]: df2
Out[21]:0
0 张三
1 22
2 男
字典列表
- 当接受的是一个字典的列表时 , 字典的keys默认称为列标签, 依然是数组中的每一个元素作为一条横向记录 (字典)
In [35]: arr4 = [{"name": "张三", "age": 22, "gender": "男"}, {"name": "李雪", "age": 18, "gender": "女"}]In [36]: df5 = pd.DataFrame(arr4)In [37]: df5
Out[37]:name age gender
0 张三 22 男
1 李雪 18 女
- 当每个字典的keys不一样时, 会把出现的所有keys作为标签, 字典中缺少该值的默认设置为NaN
In [38]: arr5 = [{"name": "张三", "age": 22, "gender": "男"}, {"name": "李雪", "age": 18, "gen": "女"}]In [39]: df6 = pd.DataFrame(arr5)In [40]: df6
Out[40]:name age gender gen
0 张三 22 男 NaN
1 李雪 18 NaN 女
二维列表
- 当接收二维列表时, 二维列表的大小就是表格的大小, 比如上例中二维列表是23, 最后输出的表格也是23, 二维列表中每一个列表元素作为一条横向记录.
- 列标签 和 行标签 依然从0开始自增
In [22]: arr2 = [["张三", 22, "男"],["李雪", 18, "女"]]In [23]: df3 = pd.DataFrame(arr2)In [24]: df3
Out[24]:0 1 2
0 张三 22 男
1 李雪 18 女
- 可以指定列标签 和 行标签 具体是什么
In [28]: df4 = pd.DataFrame(arr2, index=[1,2], columns=["姓名", "年龄", "性别"])In [29]: df4
Out[29]:姓名 年龄 性别
1 张三 22 男
2 李雪 18 女
查询
获取某一列的所有记录
- 返回值类型 Series
In [64]: df
Out[64]:name age gender
0 张三 22 男
1 李四 18 女
2 李雪 18 女In [65]: df['name']
Out[65]:
0 张三
1 李四
2 李雪
Name: name, dtype: object
获取某一列记录的逻辑索引
- 返回值类型 Series
In [66]: df['age'] == 18
Out[66]:
0 False
1 True
2 True
Name: age, dtype: bool
根据逻辑索引获取指定的一整条横向记录
- 返回值类型 DataFrame
In [67]: df[df['age']==18]
Out[67]:name age gender
1 李四 18 女
2 李雪 18 女
获取指定列和行的元素(先列后行)
- 返回值类型 基本类型
In [68]: df['name'][2]
Out[68]: '李雪'
根据逻辑索引获取指定的列记录
- 返回值类型 Series
In [71]: df['name'][df['age']==18]
Out[71]:
1 李四
2 李雪
Name: name, dtype: object
获取前几行记录
In [78]: df.head(1)
Out[78]:name age gender
0 张三 22 男In [79]: df.head(2)
Out[79]:name age gender
0 张三 22 男
1 李四 18 女
获取前几行记录
In [104]: df.tail(2)
Out[104]:name age gender
2 李雪 18 女
6 田七 19 男
根据列 降序排序后, 获取前几行记录
In [81]: df.nlargest(1,'age')
Out[81]:name age gender
0 张三 22 男In [82]: df.nlargest(2,'age')
Out[82]:name age gender
0 张三 22 男
1 李四 18 女
根据列 升序排序后, 获取前几行记录
In [83]: df.nsmallest(2,'age')
Out[83]:name age gender
1 李四 18 女
2 李雪 18 女In [84]: df.nsmallest(1,'age')
Out[84]:name age gender
1 李四 18 女
将每一行记录和索引打包成一个元组放入一个迭代器中
In [93]: for item in df.iterrows():...: print(type(item))...: print(item)...:
<class 'tuple'>
(0, name 张三
age 22
gender 男
Name: 0, dtype: object)
<class 'tuple'>
(1, name 李四
age 18
gender 女
Name: 1, dtype: object)
<class 'tuple'>
(2, name 李雪
age 18
gender 女
Name: 2, dtype: object)
修改
新增一行
In [100]: df.loc[6] = ["王五", 19, "男"]In [101]: df
Out[101]:name age gender
0 张三 22 男
1 李四 18 女
2 李雪 18 女
6 王五 19 男
官方文档
[数据处理与分析] Pandas 中的 DataFrame对象相关推荐
- python中的iloc函数_详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
pandas的DataFrame对象,本质上是二维矩阵,跟常规二维矩阵的差别在于前者额外指定了每一行和每一列的名称.这样内部数据抽取既可以用"行列名称(对应.loc[]方法)",也 ...
- Python+大数据-数据处理与分析-pandas快速入门
Python+大数据-数据处理与分析-pandas快速入门 1.Pandas快速入门 1.1DataFrame和Series介绍 1)DataFrame 用来处理结构化数据(SQL数据表,Excel表 ...
- pandas中的DataFrame数据结构
pd.DataFrame() DataFrame 是一种二维的数据模型,相当于EXcel表格中的数据,有横竖两种坐标,横轴用columns,竖轴用index 来确定,在建立DataFrame 对象的时 ...
- python列表按照指定顺序排序-pandas中的DataFrame按指定顺序输出所有列的方法
问题: 输出新建的DataFrame对象时,DataFrame中各列的显示顺序和DataFrame定义中的顺序不一致. 例如: import pandas as pd grades = [48,99, ...
- python从2 1 2 2 2 63_Python从零开始第三章数据处理与分析python中的dplyr(2)
目录 第二章(pandas) Python从零开始第三章数据处理与分析python中的dplyr(2) =============================================== ...
- Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片、相互转换
Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片.相互转换 目录 numpy中的array格式数据切片与pandas中的dataframe ...
- pandas 选取第一行_用pandas中的DataFrame时选取行或列的方法
如下所示: import numpy as np import pandas as pd from pandas import Sereis, DataFrame ser = Series(np.ar ...
- 问题:使用pandas中的DataFrame写入csv文件多出一行unnamed,如何解决呢??
问题:使用pandas中的DataFrame写入csv文件多出一行unnamed,如何解决呢?? 参考文章: (1)问题:使用pandas中的DataFrame写入csv文件多出一行unnamed,如 ...
- 根据列值删除Pandas中的DataFrame行
本文翻译自:Deleting DataFrame row in Pandas based on column value I have the following DataFrame: 我有以下Dat ...
最新文章
- oracle 字符集 AL32UTF8、UTF8
- 08 - JavaSE之IO流
- MySQL 遇到的问题
- 从2021年多篇顶会论文看OOD泛化新理论、新方法和新讨论
- MSP, CMP傻傻分不清楚?一文读懂云管理的春天
- Python 爬虫 —— scrapy
- 命令查询职责分离模式 CQRS Command Query Responsibility Segregation
- 社会工程学之《反欺骗的艺术》小结(三)
- Google搜索技巧大全:101个谷歌搜索技巧推荐
- FMEA软件之旧版FMEA导入及快速转换为新版FMEA(FMEAHunter)
- Unity 模拟鼠标自动点击事件
- ipad能不能写python_如何在ipad上写python
- 管理学-“三个和尚”
- airdrop搜不到对方_如何将AirDrop图标添加到您的macOS Dock
- mysql chinanet外网连接不上_笔记本电脑无法连接到ChinaNet无线网络怎么解决?
- pythonarp工具_Python 实现ARP扫描欺骗工具
- FTP如何设置用户名密码
- RTSP协议网络摄像头互联网无插件直播EasyNVR+EasyNVS,如何保持配置地址一致?
- 卧槽!GitHub标星7.9K star,抢茅台酒脚本竟然开源了!网友:已抢到,真香!
- C++编写一个求x的n次方的函数(其中n为非负整型)