标题# 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格式知识点总结相关推荐

  1. python读取txt为dataframe_python批量读取txt文件为DataFrame格式的方法总结

    python怎么批量读取txt文件为DataFrame格式 这次给大家带来python怎么批量读取txt文件为DataFrame格式,python批量读取txt文件为DataFrame格式的注意事项有 ...

  2. python将scikit-learn自带数据集转换为pandas dataframe格式

    python将scikit-learn自带数据集转换为pandas dataframe格式 目录 python将scikit-learn自带数据集转换为pandas dataframe格式 #仿真数据

  3. Py之pandas:字典格式数据与dataframe格式数据相互转换并导出到csv

    Py之pandas:字典格式数据与dataframe格式数据相互转换并导出到csv 目录 字典格式数据与dataframe格式数据相互转换并导出到csv (1).将字典格式数据转为DataFrame格 ...

  4. Py之pandas:利用isin函数对dataframe格式数据按照多个字段的条件筛选

    Py之pandas:利用isin函数对dataframe格式数据按照多个字段的条件筛选 目录 利用isin函数对dataframe格式数据按照多个字段的条件筛选 代码设计 输出结果

  5. Py之pandas:利用where、replace等函数对dataframe格式数据按照条件进行数据替换

    Py之pandas:利用where.replace等函数对dataframe格式数据按照条件进行数据替换 目录 利用where.replace等函数对dataframe格式数据按照条件进行数据替换 利 ...

  6. Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片、相互转换

    Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片.相互转换 目录 numpy中的array格式数据切片与pandas中的dataframe ...

  7. 成功解决pandas.core.frame.DataFrame格式数据与numpy.ndarray格式数据不一致导致无法运算问题

    成功解决pandas.core.frame.DataFrame格式数据与numpy.ndarray格式数据不一致导致无法运算问题 目录 解决问题 解决思路 解决方法 解决问题 pandas.core. ...

  8. 成功解决利用pandas输出DataFrame格式数据表时没有最左边的索引编号(我去,这个问题折腾了我半个多小时)

    成功解决利用pandas输出DataFrame格式数据表时没有最左边的索引编号(我去,这个问题折腾了我半个多小时) 导读:首先,关于这个问题,博主想骂街,经过各种查询,没找到类似问题,然后博主自己不断 ...

  9. 将DataFrame格式的数据存入到mysql数据库中

    因为最近频繁操作数据库,特别是写入数据比较麻烦.在DataFrame格式或者是Series格式的数据处理之后,总是会面临写入数据,迫不得已只能进行格式转换,搜索过程中发现了to_sql()函数,就百度 ...

最新文章

  1. [转载]dorado学习笔记(二)
  2. shardingjdbc每月分表_shardingjdbc分库分表测试
  3. 设计模式学习笔记(十六:桥接模式)
  4. db2分页查询语句优化_面试官:数据量很大,分页查询很慢,怎么优化?
  5. MAC电脑数据迁移方法
  6. 计算机视觉与深度学习 | 基于MATLAB 深度学习工具实现简单的数字分类问题(卷积神经网络)
  7. StoryBoard学习..(很详细.)
  8. mysql分区表达式_怎么定义 mysql hash分区使用的用 户定义的表达式
  9. 新一代互联网巨头老板,最大方谁抠门?
  10. matlab listbox选中输出,vba中ListBox控件的使用
  11. python for a,b in c
  12. 中海达ihand30手簿详细教程_开盘秒清,中海这次模拟选房结果恐将成真
  13. 云杰恒指:期货交易操盘手是怎样的体验?
  14. vce 题库导入_PDF 题库转VCE 文件
  15. 【spark】八 自己实现 RDD中 某列 累计百分比确定阈值
  16. MySQL批量插入1000w条数据
  17. ios开发-文字绘制
  18. FF员工讨薪恒大进展:10余员工集体仲裁 第2批维权者在路上
  19. 酒浓码浓 - node之http
  20. 行列式计算方法(1)

热门文章

  1. android 5.0 apk 安装失败提示INSTALL_FAILED_INVALID_URI
  2. 教你使用html三剑客写一个高级的伪3D效果
  3. 刷新页面仍保留当前数据显示
  4. 运行结果是随机数——我帮你解决
  5. java 视频截取图片 linux,在Windows和Linux下用JAVA调用FFMPEG 3.x进行视频截图的最新范例...
  6. 2015百度之星资格赛解题报告
  7. 2016.05.06软件更新公告
  8. 2020.1.14课程摘要(逻辑教育-王劲胜)
  9. QQ 空间相册新功能
  10. setwd的cannot change working directory处理