How to use DataFrame ?

简介 分布式数据集(常用于数据分析)

创建 DataFrame

查看与筛选数据行列选取

DataFrame 数据操作增删改

一、About DataFrame

  DataFrame 是 Python 中 Pandas 库中的一种数据结构,是一种二维表。它类似 excel,或许说它可能有点像 matlab 的矩阵,但是 matlab 的矩阵只能放数值型值(当然 matlab 也可以用 cell 存放多类型数据),DataFrame 的单元格可以存放数值、字符串等,这就和 excel 表很像。

  同时 DataFrame 可以设置列名 columns 与行名 index,可以通过像 matlab 一样通过位置获取数据也可以通过列名和行名定位。

二、创建 DataFrame

版本声明:Python 3.6.7

import pandas as pd
import numpy as np  # pandas 常与 numpy 一起配合使用

如果还没安装直接在 cmd 里 pip 安装:

> pip install pandas
> pip install numpy

1、直接创建

  可以直接使用 pandas 的 DataFrame 函数创建,比如随机创建一个 4*4 的 DataFrame:

  np.random.randn(4,4):存放在DataFrame里的数据

  index=list('ABCD'):行名(或者可以说是索引)

  columns=list('ABCD'):列名

  后两个参数可以使用 list 输入,但是注意,这个list的长度要和 DataFrame 的大小匹配,不然会报错。当然,这两个参数是可选的,你可以选择不设置。而且发现,这两个list是可以一样的,但是每行每列的名字在 index 或 columns 里要是唯一的。

  小数据量,手工键入数据:

df2 = pd.DataFrame([[1,2,3,4],[2,3,4,5], [3,4,5,6],[4,5,6,7]],
index=(['r1','r2','r3','r4']),
columns=(['c1','c2','c3','c4']))

2、使用字典创建

  使用 DataFrame 方法,但是字典的每个 key 的 value 代表一列,而 key 是这一列的列名:

三、查看与筛选数据

1、查看列的数据类型:使用 dtypes 方法可以查看各列的数据类型

2、查看DataFrame的头尾

  使用 head 可以查看前几行的数据,默认的是前5行,不过也可以自己设置;

  使用 tail 可以查看后几行的数据,默认也是5行,参数可以自己设置;

3、查看行名与列名

  使用 index 查看行名,columns 查看列名

In [6]: df3.dtypes
Out[6]:
name object
age int64
gender object
dtype: object In [7]: df3.head(1)
Out[7]:
name age gender
0 张三 18 男 In [8]: df3.tail(1)
Out[8]:
name age gender
2 王五 22 男 In [9]: df3.index
Out[9]: RangeIndex(start=0, stop=3, step=1) In [10]: df3.columns
Out[10]: Index(['name', 'age', 'gender'], dtype='object')

4、查看数据值

  使用 values 可以查看 DataFrame 里的数据值,返回的是一个数组:

# 查看所有的数据值
In [11]: df3.values
Out[11]:
array([['张三', 18, '男'],
['李四', 20, '女'],
['王五', 22, '男']], dtype=object)
# 查看某一列所有的数据值
In [12]: df3['name'].values
Out[12]: array(['张三', '李四', '王五'], dtype=object)

  使用 loc 或者 iloc (切片)查看数据值,区别是 loc 是根据行名,iloc 是根据数字索引:

  ①loc:(location),works on labels in the index,只能使用字符型标签来索引数据,不能使用数字来索引数据,不过有特殊情况,当数据框dataframe的行标签或者列标签为数字,loc就可以来其来索引。

  ②iloc:(i=integer),works on the positions in the index (so it only takes integers),主要使用数字来索引数据,而不能使用字符型的标签来索引数据。

In [13]: df3.loc[1]
Out[13]:
name 李四
age 20
gender 女
Name: 1, dtype: object In [14]: df3.iloc[1]
Out[14]:
name 李四
age 20
gender 女
Name: 1, dtype: object

5、查看行列数:使用 shape 查看行列数,注意:参数为0 表示查看行数,参数为1 表示查看列数。

6、DataFrame 数据格式的行列选取

import numpy as np
import pandas as pd data = pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz')) data['w']    #选择表格中的'w'列,使用类字典属性,返回的是Series类型 data.w    #选择表格中的'w'列,使用点属性,返回的是Series类型 data[['w']] #选择表格中的'w'列,返回的是DataFrame属性 data[['w','z']] #选择表格中的'w'、'z'列 data[0:2] #返回第1行到第2行的所有行,前闭后开,包括前不包括后 data[1:2] #返回第2行,从0计,返回的是单行,通过有前后值的索引形式,
#如果采用data[1]则报错 data.ix[1:2] #(deprecated)返回第2行的第三种方法,返回的是DataFrame,跟data[1:2]同 data['a':'b'] #利用index值进行切片,返回的是**前闭后闭**的DataFrame,
#即末端是包含的
data.irow(0) #(deprecated)取data的第一行
data.icol(0) #(deprecated)取data的第一列 data.head() #返回data的前几行数据,默认为前五行,需要前十行则dta.head(10)
data.tail() #返回data的后几行数据,默认为后五行,需要后十行则data.tail(10) data.iloc[-1] #选取DataFrame最后一行,返回的是Series
data.iloc[-1:] #选取DataFrame最后一行,返回的是DataFrame data.loc['a',['w','x']] #返回‘a’行'w'、'x'列,这种用于选取行索引列索引已知 data.iat[1,1] #选取第二行第二列,用于已知行、列位置的选取

四、DataFrame 数据操作

1、转置:直接字母T,这就有点 线性代数 的味道了哈

2、描述性统计

  使用 describe 方法可以对数据根据“列”进行描述性统计:

In [15]: df3.describe()
Out[15]:
age
count 3.0
mean 20.0
std 2.0
min 18.0
25% 19.0
50% 20.0
75% 21.0
max 22.0

  由上可以看出,如果有的列是非数值型的,那么就跳过不会进行统计;如果想对行进行描述性统计,可以灵活处理一下:转置后进行 describe。

3、计算

  使用 sum 默认对每“列”求和,sum(1) 为对每“行”求和:

In [16]: df3.sum()        # 列求和
Out[16]:
name 张三李四王五 # 如果元素是字符串,使用sum也会加起来(字符串拼接)
age 60
gender 男女男
dtype: object In [17]: df3.sum(1) # 行求和
Out[17]:
0 18 # 行中,如果有字符串有数值,则只计算数值
1 20
2 22
dtype: int64

  数乘运算使用 apply(应用 lambda 实现):

In [18]: df2
Out[18]:
c1 c2 c3 c4
r1 1 2 3 4
r2 2 3 4 5
r3 3 4 5 6
r4 4 5 6 7 In [19]: df2.apply(lambda x:x*2)
Out[19]:
c1 c2 c3 c4
r1 2 4 6 8
r2 4 6 8 10
r3 6 8 10 12
r4 8 10 12 14

  如果元素是字符串,则会把字符串再重复一遍。

  乘方运算跟 matlab 类似,直接使用两个 *,乘方运算如果有元素是字符串的话,就会报错。

4、增删改

In [36]: df2
Out[36]:
c1 c2 c3 c4
r1 1 2 3 4
r2 2 3 4 5
r3 3 4 5 6
r4 4 5 6 7 # 1.增
In [37]: df2['c5'] = 8 # 创建新列并赋值(统一值) In [38]: df2
Out[38]:
c1 c2 c3 c4 c5
r1 1 2 3 4 8
r2 2 3 4 5 8
r3 3 4 5 6 8
r4 4 5 6 7 8 In [39]: df2.insert(0,'c0',[9, 9, 9, 9]) # 使用 insert 方法可以指定把列插入到第几列,其他的列顺延 In [40]: df2
Out[40]:
c0 c1 c2 c3 c4 c5
r1 9 1 2 3 4 8
r2 9 2 3 4 5 8
r3 9 3 4 5 6 8
r4 9 4 5 6 7 8 # 2.删
In [41]: del df2['c0'] In [42]: df2
Out[42]:
c1 c2 c3 c4 c5
r1 1 2 3 4 8
r2 2 3 4 5 8
r3 3 4 5 6 8
r4 4 5 6 7 8 In [43]: df2.drop('c1',axis=1) # 使用 drop() 方法删除
Out[43]:
c2 c3 c4 c5
r1 2 3 4 8
r2 3 4 5 8
r3 4 5 6 8
r4 5 6 7 8 In [44]: df2 # 用 drop 删除时,删的是视图,并没有真正删除
Out[44]:
c1 c2 c3 c4 c5
r1 1 2 3 4 8
r2 2 3 4 5 8
r3 3 4 5 6 8
r4 4 5 6 7 8 # dorp()可以通过axis(行:axis=0 ,列:axis=1)可以控制删除行或列,默认是行
# dorp()可以同时删除多行或多列,如 df2.drop(['c1','c2'], axis=1) # 3.改
In [45]: df2['c5']['r3'] = 99 In [46]: df2
Out[46]:
c1 c2 c3 c4 c5
r1 1 2 3 4 8
r2 2 3 4 5 8
r3 3 4 5 6 99
r4 4 5 6 7 8

5、合并拼接

  使用 join 可以将两个 DataFrame 合并,但只根据行列名合并,并且以作用的那个 DataFrame 的为基准。

  但是,join 这个方法还有 how 这个参数可以设置,合并两个 DataFrame 的交集或并集。参数为 'inner' 表示交集,'outer' 表示并集。

  如果要合并多个 Dataframe,可以用 list 把几个 Dataframe 装起来,然后使用 concat 转化为一个新的 Dataframe。

Pandas 库之 DataFrame的更多相关文章

  1. Pandas库之DataFrame

    Pandas库之DataFrame 1 简介 DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表. 或许说它可能有点像matlab的矩阵,但是matlab ...

  2. 【Python学习笔记】Pandas库之DataFrame

    1 简介 DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表. 或许说它可能有点像matlab的矩阵,但是matlab的矩阵只能放数值型值(当然matla ...

  3. python数据分析之pandas库的DataFrame应用二

    本节介绍Series和DataFrame中的数据的基本手段 重新索引 pandas对象的一个重要方法就是reindex,作用是创建一个适应新索引的新对象 ''' Created on 2016-8-1 ...

  4. [转]python中pandas库中DataFrame对行和列的操作使用方法

    转自:http://blog.csdn.net/u011089523/article/details/60341016 用pandas中的DataFrame时选取行或列: import numpy a ...

  5. python中pandas库中DataFrame对行和列的操作使用方法

    用pandas中的DataFrame时选取行或列: import numpy as np import pandas as pd from pandas import Sereis, DataFram ...

  6. python数据分析之pandas库的DataFrame应用一

    DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值,字符串,布尔型).DateFrame既有行索引也有列索引,可以被看作为由Series组成的字典. 构建Dat ...

  7. 数据分析与展示---Pandas库入门

    简介 一:Pandas库的介绍 二:Pandas库的Series类型 (一)索引 (1)自动索引 (2)自定义索引 (二)Series类型创建 (1)列表创建 (2)标量值创建 (3)字典类型创建(将 ...

  8. pandas库学习笔记(二)DataFrame入门学习

    Pandas基本介绍——DataFrame入门学习 前篇文章中,小生初步介绍pandas库中的Series结构的创建与运算,今天小生继续“死磕自己”为大家介绍pandas库的另一种最为常见的数据结构D ...

  9. Pandas库中的DataFrame

    1 简介 DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表. 或许说它可能有点像matlab的矩阵,但是matlab的矩阵只能放数值型值(当然matla ...

随机推荐

  1. Codeforces Gym101505G:Orchard Division(扫描线+线段树第k大)

    题目链接 题意 给出一个m*m的地图,上面有n个点,现在需要用一个自定义面积的矩形笼罩住恰好n/2个点,并且这个矩形需要有一个点在至少一个角落上,问这个矩形最小的面积是多少. 思路 有点类似于扫描线. ...

  2. Codeforces 782B:The Meeting Place Cannot Be Changed(三分搜索)

    http://codeforces.com/contest/782/problem/B 题意:有n个人,每个人有一个位置和速度,现在要让这n个人都走到同一个位置,问最少需要的时间是多少. 思路:看上去 ...

  3. ZOJ 3795:Grouping(缩点+最长路)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5303 题意:有n个人m条边,每条边有一个u,v,代表u的年龄大于等于v,现在要 ...

  4. django基础知识之分页:

    分页 Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中 Paginator对象 Paginator(列表,int):返回分页对象,参数为列表数据, ...

  5. 2050编程赛 冰水挑战 HDU 6495

    题目地址:https://vjudge.net/problem/HDU-6495 思路:我们需要维护的是挑战了n个之后剩余体力值,剩余体力值越大越好dp[N(i)][N(j)],第一个维度,记录当前是 ...

  6. Connecting to the Network

    This lesson shows you how to implement a simple application that connects to the network. It explain ...

  7. Java核心技术中的程序片段

    import java.io.*; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import ...

  8. Java编程思想:标准I/O

    import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils; import java.io.*; public class Test { ...

  9. Excel催化剂开源第47波-Excel与PowerBIDeskTop互通互联之第一篇

    当国外都在追求软件开源,并且在GitHub等平台上产生了大量优质的开源代码时,但在国内却在刮着一股收割小白智商税的知识付费热潮,实在可悲. 互联网的精神乃是分享,让分享带来更多人的受益. 在Power ...

  10. 个人永久性免费-Excel催化剂功能第54波-批量图片导出,调整大小等

    图片作为一种数据存在,较一般的存放在Excel单元格或其他形式存在的文本数据,对其管理更为不易,特别是仅有Excel原生的简单的插入图片功能时,Excel催化剂已全面覆盖图片数据的使用场景,无论是图片 ...