dataframe格式知识点总结
标题# dataframe格式知识点总结
1、DataFrame的创建
DataFrame是一种表格型数据结构,它含有一组有序的列,每列可以是不同的值。DataFrame既有行索引,也有列索引,它可以看作是由Series组成的字典,不过这些Series公用一个索引。
DataFrame的创建有多种方式,不过最重要的还是根据dict进行创建,以及读取csv或者txt文件来创建。这里主要介绍这两种方式。
参考链接:https://www.jianshu.com/p/8024ceef4fe2
根据字典创建
import pandas as pd
data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9]}
dataframe1 = pd.DataFrame(data)
print('创建的dataframe1如下:\n',dataframe1)
创建的dataframe1如下:state year pop
0 Ohio 2000 1.5
1 Ohio 2001 1.7
2 Ohio 2002 3.6
3 Nevada 2001 2.4
4 Nevada 2002 2.9
DataFrame的行索引是index,列索引是columns,我们可以在创建DataFrame时指定索引的值:
dataframe2 = pd.DataFrame(data,index=['one','two','three','four','five'],columns=['year','state','pop','debt'])
print('创建的dataframe2如下:\n',dataframe2)
创建的dataframe2如下:year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 NaN
five 2002 Nevada 2.9 NaN
使用嵌套字典也可以创建DataFrame,此时外层字典的键作为列,内层键则作为索引:
pop = {'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
frame3 = pd.DataFrame(pop)
frame3
Nevada | Ohio | |
---|---|---|
2001 | 2.4 | 1.7 |
2002 | 2.9 | 3.6 |
2000 | NaN | 1.5 |
我们可以用index,columns,values来访问DataFrame的行索引,列索引以及数据值,数据值返回的是一个二维的ndarray
frame3.values
array([[2.4, 1.7],[2.9, 3.6],[nan, 1.5]])
frame3.Nevada
2001 2.4
2002 2.9
2000 NaN
Name: Nevada, dtype: float64
2.读取文件
读取文件生成DataFrame最常用的是read_csv,read_table方法。该方法中几个重要的参数如下所示:
参数 | 描述 |
---|---|
header | 默认第一行为columns,如果指定header=None,则表明没有索引行,第一行就是数据 |
index_col | 默认作为索引的为第一列,可以设为index_col为-1,表明没有索引列 |
nrows | 表明读取的行数 |
sep或delimiter | 分隔符,read_csv默认是逗号,而read_table默认是制表符 |
encoding | 编码格式 |
其他创建DataFrame的方式有很多,比如我们可以通过读取mysql或者mongoDB来生成,也可以读取json文件等等,这里就不再介绍。
3.DataFrame轴的概念
在DataFrame的处理中经常会遇到轴的概念,这里先给大家一个直观的印象,我们所说的axis=0即表示沿着每一列或行标签\索引值向下执行方法,axis=1即
表示沿着每一行或者列标签模向执行对应的方法。
4.DataFrame一些性质
索引、切片
我们可以根据列名来选取一列,返回一个Series:
frame3['Nevada']
2001 2.4
2002 2.9
2000 NaN
Name: Nevada, dtype: float64
我们还可以选取多列或者多行:
import numpy as np
data = pd.DataFrame(np.arange(16).reshape((4,4)),index = ['Ohio','Colorado','Utah','New York'],columns=['one','two','three','four'])
#取列
data[['two','three']]
two | three | |
---|---|---|
Ohio | 1 | 2 |
Colorado | 5 | 6 |
Utah | 9 | 10 |
New York | 13 | 14 |
#取行
data[:2]
one | two | three | four | |
---|---|---|---|---|
Ohio | 0 | 1 | 2 | 3 |
Colorado | 4 | 5 | 6 | 7 |
#取特定的行和列
data[['two','three']][:2]
two | three | |
---|---|---|
Ohio | 1 | 2 |
Colorado | 5 | 6 |
当然,在选取数据的时候,我们还可以根据逻辑条件来选取:
#用于筛选特定的数据
data[data['three']>5]
one | two | three | four | |
---|---|---|---|---|
Colorado | 4 | 5 | 6 | 7 |
Utah | 8 | 9 | 10 | 11 |
New York | 12 | 13 | 14 | 15 |
pandas提供了专门的用于索引DataFrame的方法,即使用ix方法进行索引,不过ix在最新的版本中已经被废弃了,如果要是用标签,最好使用loc方法,如果使用下标,最好使用iloc方法:
data
one | two | three | four | |
---|---|---|---|---|
Ohio | 0 | 1 | 2 | 3 |
Colorado | 4 | 5 | 6 | 7 |
Utah | 8 | 9 | 10 | 11 |
New York | 12 | 13 | 14 | 15 |
data.loc['Colorado',['two','three']]
two 5
three 6
Name: Colorado, dtype: int32
data.iloc[0:3,2]
Ohio 2
Colorado 6
Utah 10
Name: three, dtype: int32
type(data.iloc[0:3,2])
pandas.core.series.Series
修改数据
可以使用一个标量修改DataFrame中的某一列,此时这个标量会广播到DataFrame的每一行上
data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9]
}
frame2 = pd.DataFrame(data,index=['one','two','three','four','five'],columns=['year','state','pop','debt'])
frame2
frame2['debt']=16.5
frame2
year | state | pop | debt | |
---|---|---|---|---|
one | 2000 | Ohio | 1.5 | 16.5 |
two | 2001 | Ohio | 1.7 | 16.5 |
three | 2002 | Ohio | 3.6 | 16.5 |
four | 2001 | Nevada | 2.4 | 16.5 |
five | 2002 | Nevada | 2.9 | 16.5 |
也可以使用一个列表来修改,不过要保证列表的长度与DataFrame长度相同:
frame2.debt = np.arange(5)
frame2
year | state | pop | debt | |
---|---|---|---|---|
one | 2000 | Ohio | 1.5 | 0 |
two | 2001 | Ohio | 1.7 | 1 |
three | 2002 | Ohio | 3.6 | 2 |
four | 2001 | Nevada | 2.4 | 3 |
five | 2002 | Nevada | 2.9 | 4 |
可以使用一个Series,此时会根据索引进行精确匹配:
val = pd.Series([-1.2,-1.5,-1.7],index=['two','four','five'])
frame2['debt'] = val
frame2
year | state | pop | debt | |
---|---|---|---|---|
one | 2000 | Ohio | 1.5 | NaN |
two | 2001 | Ohio | 1.7 | -1.2 |
three | 2002 | Ohio | 3.6 | NaN |
four | 2001 | Nevada | 2.4 | -1.5 |
five | 2002 | Nevada | 2.9 | -1.7 |
重新索引
使用reindex方法对DataFrame进行重新索引。对DataFrame进行重新索引,可以重新索引行,列或者两个都修改,如果只传入一个参数,则会从新索引行:
frame = pd.DataFrame(np.arange(9).reshape((3,3)),index=[1,4,5],columns=['Ohio','Texas','California'])
frame2 = frame.reindex([1,2,4,5])
frame2
Ohio | Texas | California | |
---|---|---|---|
1 | 0.0 | 1.0 | 2.0 |
2 | NaN | NaN | NaN |
4 | 3.0 | 4.0 | 5.0 |
5 | 6.0 | 7.0 | 8.0 |
states = ['Texas','Utah','California']
frame.reindex(columns=states)
Texas | Utah | California | |
---|---|---|---|
1 | 1 | NaN | 2 |
4 | 4 | NaN | 5 |
5 | 7 | NaN | 8 |
填充数据只能按行填充,此时只能对行进行重新索引:
frame = pd.DataFrame(np.arange(9).reshape((3,3)),index = ['a','c','d'],columns = ['Ohio','Texas','California'])
frame.reindex(['a','b','c','d'],method = 'bfill')
#frame.reindex(['a','b','c','d'],method = 'bfill',columns=states) 报错
Ohio | Texas | California | |
---|---|---|---|
a | 0 | 1 | 2 |
b | 3 | 4 | 5 |
c | 3 | 4 | 5 |
d | 6 | 7 | 8 |
丢弃指定轴上的值
可以使用drop方法丢弃指定轴上的值,不会对原DataFrame产生影响,指定行时axis = 0,指定列时axis = 1(axis缺省值为0)
#原值
frame
Ohio | Texas | California | |
---|---|---|---|
a | 0 | 1 | 2 |
c | 3 | 4 | 5 |
d | 6 | 7 | 8 |
import pandas as pd
import numpy as np
frame = pd.DataFrame(np.arange(9).reshape((3,3)),index = ['a','c','d'],columns = ['Ohio','Texas','California'])
new_frame = frame.drop('a',axis=0)
#丢弃后
new_frame
Ohio | Texas | California | |
---|---|---|---|
c | 3 | 4 | 5 |
d | 6 | 7 | 8 |
new_frame = frame.drop(['Ohio'],axis=1)
#丢弃后
new_frame
Texas | California | |
---|---|---|
a | 1 | 2 |
c | 4 | 5 |
d | 7 | 8 |
算术运算
DataFrame在进行算术运算时会进行补齐,在不重叠的部分补足NA:
df1 = pd.DataFrame(np.arange(9).reshape((3,3)),columns=list('bcd'),index=['Ohio','Texas','Colorado'])
df2 = pd.DataFrame(np.arange(12).reshape((4,3)),columns = list('bde'),index=['Utah','Ohio','Texas','Oregon'])
df1 + df2
b | c | d | e | |
---|---|---|---|---|
Colorado | NaN | NaN | NaN | NaN |
Ohio | 3.0 | NaN | 6.0 | NaN |
Oregon | NaN | NaN | NaN | NaN |
Texas | 9.0 | NaN | 12.0 | NaN |
Utah | NaN | NaN | NaN | NaN |
可以使用fill_value方法填充NA数据,不过两个df中都为NA的数据,该方法不会填充
df1.add(df2,fill_value=0)
df1
b | c | d | |
---|---|---|---|
Ohio | 0 | 1 | 2 |
Texas | 3 | 4 | 5 |
Colorado | 6 | 7 | 8 |
dataframe格式知识点总结相关推荐
- python读取txt为dataframe_python批量读取txt文件为DataFrame格式的方法总结
python怎么批量读取txt文件为DataFrame格式 这次给大家带来python怎么批量读取txt文件为DataFrame格式,python批量读取txt文件为DataFrame格式的注意事项有 ...
- python将scikit-learn自带数据集转换为pandas dataframe格式
python将scikit-learn自带数据集转换为pandas dataframe格式 目录 python将scikit-learn自带数据集转换为pandas dataframe格式 #仿真数据
- Py之pandas:字典格式数据与dataframe格式数据相互转换并导出到csv
Py之pandas:字典格式数据与dataframe格式数据相互转换并导出到csv 目录 字典格式数据与dataframe格式数据相互转换并导出到csv (1).将字典格式数据转为DataFrame格 ...
- Py之pandas:利用isin函数对dataframe格式数据按照多个字段的条件筛选
Py之pandas:利用isin函数对dataframe格式数据按照多个字段的条件筛选 目录 利用isin函数对dataframe格式数据按照多个字段的条件筛选 代码设计 输出结果
- Py之pandas:利用where、replace等函数对dataframe格式数据按照条件进行数据替换
Py之pandas:利用where.replace等函数对dataframe格式数据按照条件进行数据替换 目录 利用where.replace等函数对dataframe格式数据按照条件进行数据替换 利 ...
- Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片、相互转换
Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片.相互转换 目录 numpy中的array格式数据切片与pandas中的dataframe ...
- 成功解决pandas.core.frame.DataFrame格式数据与numpy.ndarray格式数据不一致导致无法运算问题
成功解决pandas.core.frame.DataFrame格式数据与numpy.ndarray格式数据不一致导致无法运算问题 目录 解决问题 解决思路 解决方法 解决问题 pandas.core. ...
- 成功解决利用pandas输出DataFrame格式数据表时没有最左边的索引编号(我去,这个问题折腾了我半个多小时)
成功解决利用pandas输出DataFrame格式数据表时没有最左边的索引编号(我去,这个问题折腾了我半个多小时) 导读:首先,关于这个问题,博主想骂街,经过各种查询,没找到类似问题,然后博主自己不断 ...
- 将DataFrame格式的数据存入到mysql数据库中
因为最近频繁操作数据库,特别是写入数据比较麻烦.在DataFrame格式或者是Series格式的数据处理之后,总是会面临写入数据,迫不得已只能进行格式转换,搜索过程中发现了to_sql()函数,就百度 ...
最新文章
- [转载]dorado学习笔记(二)
- shardingjdbc每月分表_shardingjdbc分库分表测试
- 设计模式学习笔记(十六:桥接模式)
- db2分页查询语句优化_面试官:数据量很大,分页查询很慢,怎么优化?
- MAC电脑数据迁移方法
- 计算机视觉与深度学习 | 基于MATLAB 深度学习工具实现简单的数字分类问题(卷积神经网络)
- StoryBoard学习..(很详细.)
- mysql分区表达式_怎么定义 mysql hash分区使用的用 户定义的表达式
- 新一代互联网巨头老板,最大方谁抠门?
- matlab listbox选中输出,vba中ListBox控件的使用
- python for a,b in c
- 中海达ihand30手簿详细教程_开盘秒清,中海这次模拟选房结果恐将成真
- 云杰恒指:期货交易操盘手是怎样的体验?
- vce 题库导入_PDF 题库转VCE 文件
- 【spark】八 自己实现 RDD中 某列 累计百分比确定阈值
- MySQL批量插入1000w条数据
- ios开发-文字绘制
- FF员工讨薪恒大进展:10余员工集体仲裁 第2批维权者在路上
- 酒浓码浓 - node之http
- 行列式计算方法(1)
热门文章
- android 5.0 apk 安装失败提示INSTALL_FAILED_INVALID_URI
- 教你使用html三剑客写一个高级的伪3D效果
- 刷新页面仍保留当前数据显示
- 运行结果是随机数——我帮你解决
- java 视频截取图片 linux,在Windows和Linux下用JAVA调用FFMPEG 3.x进行视频截图的最新范例...
- 2015百度之星资格赛解题报告
- 2016.05.06软件更新公告
- 2020.1.14课程摘要(逻辑教育-王劲胜)
- QQ 空间相册新功能
- setwd的cannot change working directory处理