DataFrame结构

DataFrame 一个表格型的数据结构,既有行标签(index),又有列标签(columns),它也被称异构数据表,所谓异构,指的是表格中每列的数据类型可以不同,比如可以是字符串、整型或者浮点型等。其结构图示意图,如下所示:

表格中数据以行和列形式来表示,其中每一列表示一个属性,而每一行表示一个条目的信息。
下表展示了上述表格中每一列标签所描述数据的数据类型,如下所示:

Column Type
name String
age integer
gender String
rating Float

DataFrame 的每一行数据都可以看成一个 Series 结构,只不过,DataFrame 为这些行中每个数据值增加了一个列标签。因此 DataFrame 其实是从 Series 的基础上演变而来。在数据分析任务中 DataFrame 的应用非常广泛,因为它描述数据的更为清晰、直观。下面对 DataFrame 数据结构的特点做简单地总结,如下所示:

  • DataFrame 每一列的标签值允许使用不同的数据类型;
  • DataFrame 是表格型的数据结构,具有行和列;
  • DataFrame 中的每个数据值都可以被修改。
  • DataFrame 结构的行数、列数允许增加或者删除;
  • DataFrame 有两个方向的标签轴,分别是行标签和列标签;
  • DataFrame 可以对行和列执行算术运算。

创建DataFrame对象

创建 DataFrame 对象的语法格式如下:

  1. import pandas as pd
  2. pd.DataFrame( data, index, columns, dtype, copy)

参数说明:

参数名称 说明
data 输入的数据,可以是 ndarray,series,list,dict,标量以及一个 DataFrame。
index 行标签,如果没有传递 index 值,则默认行标签是 np.arange(n),n 代表 data 的元素个数。
columns 列标签,如果没有传递 columns 值,则默认列标签是 np.arange(n)。
dtype dtype表示每一列的数据类型。
copy 默认为 False,表示复制数据 data。

Pandas 提供了多种创建 DataFrame 对象的方式,主要包含以下五种,分别进行介绍。

1) 创建空的DataFrame对象

import pandas as pd
df = pd.DataFrame()
print(df)# 输出结果如下:
<span style="color:#444444">Empty DataFrame
Columns: []
Index: []</span>

2) 列表创建DataFame对象

# 示例 1,单一列表创建 DataFrame:
import pandas as pd
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print(df)# 输出如下:
<span style="color:#444444">     0
0    1
1    2
2    3
3    4
4    5</span># 示例 2,使用嵌套列表创建 DataFrame 对象:
import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]df = pd.DataFrame(data, columns=['Name','Age'])
print(df)
输出结果:
<span style="color:#444444">      Name      Age
0     Alex      10
1     Bob       12
2     Clarke    13</span># 指定数值元素的数据类型为 float:
df = pd.DataFrame(data, columns=['Name','Age'], dtype=float)
print(df)
输出结果:
<span style="color:#444444">      Name     Age
0     Alex     10.0
1     Bob      12.0
2     Clarke   13.0</span>

3) 字典嵌套列表创建

data 字典中,键对应的值的元素长度必须相同(也就是列表长度相同)。如果传递了索引,那么索引的长度应该等于数组的长度;如果没有传递索引,那么默认情况下,索引将是 range(n),其中 n 代表数组长度。

​
示例
import pandas as pd
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
print(df)输出结果:
<span style="color:#444444">      Age      Name
0     28        Tom
1     34       Jack
2     29      Steve
3     42      Ricky</span>上述示例添加自定义的行标签,index 参数为每行分配了一个索引。
df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])
print(df)输出结果如下:
<span style="color:#444444">         Age    Name
rank1    28      Tom
rank2    34     Jack
rank3    29    Steve
rank4    42    Ricky</span>

4) 列表嵌套字典创建DataFrame对象

列表嵌套字典可以作为输入数据传递给 DataFrame 构造函数。默认情况下,字典的键被用作列名。

示例
import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print(df)输出结果:
<span style="color:#444444">    a    b      c
0   1   2     NaN
1   5   10   20.0</span>注意:如果其中某个元素值缺失,也就是字典的 key 无法找到对应的 value,将使用 NaN 代替。# 给上述示例添加行标签索引:
df = pd.DataFrame(data, index=['first', 'second'])
print(df)输出结果:
<span style="color:#444444">       a   b       c
first   1   2     NaN
second  5   10   20.0</span>

5) Series创建DataFrame对象

您也可以传递一个字典形式的 Series,从而创建一个 DataFrame 对象,其输出结果的行索引是所有 index 的合集。 示例如下:

​import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(df)
输出结果如下:<span style="color:#444444">one    two
a     1.0    1
b     2.0    2
c     3.0    3
d     NaN    4</span>注意:对于 one 列而言,此处虽然显示了行索引 'd',但由于没有与其对应的值,所以它的值为 NaN。

列索引操作DataFrame

DataFrame 可以使用列索(columns index)引来完成数据的选取、添加和删除操作。下面依次对这些操作进行介绍。

1) 列索引选取数据列

​import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(df ['one'])输出结果:
<span style="color:#444444">
a     1.0
b     2.0
c     3.0
d     NaN
Name: one, dtype: float64</span>

2) 列索引添加数据列

import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)#使用df['列']=值,插入新的数据列
df['three']=pd.Series([10,20,30],index=['a','b','c'])#将已经存在的数据列做相加运算
df['four']=df['one']+df['three']

上述示例,我们初次使用了 DataFrame 的算术运算,这和 NumPy 非常相似。除了使用df[]=value的方式外,您还可以使用 insert() 方法插入新的列,示例如下:

​import pandas as pd
info=[['Jack',18],['Helen',19],['John',17]]
df=pd.DataFrame(info, columns=['name','age'])
print(df)#数值1代表插入到columns列表的索引位置
df.insert(1, column='score',value=[91,90,75])
print(df)输出结果:
<span style="color:#444444">添加前:name  age
0   Jack   18
1  Helen   19
2   John   17添加后:name  score  age
0   Jack     91   18
1  Helen     90   19
2   John     75   17</span>

3) 列索引删除数据列

通过 del 和 pop() 都能够删除 DataFrame 中的数据列。示例如下:

import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']),
'three' : pd.Series([10,20,30], index=['a','b','c'])}
df = pd.DataFrame(d)
# 原始df
print(df)#使用del删除
del df['one']
print(df)#使用pop方法删除
df.pop('two')
print (df)

输出结果:

<span style="color:#444444">原DataFrame:one   three  two
a     1.0    10.0   1
b     2.0    20.0   2
c     3.0    30.0   3
d     NaN     NaN   4使用del删除 first:three    two
a     10.0     1
b     20.0     2
c     30.0     3
d     NaN      4使用 pop()删除:three
a  10.0
b  20.0
c  30.0
d  NaN</span>

行索引操作DataFrame

理解了上述的列索引操作后,行索引操作就变的简单。也有选取,添加和删除操作

选取数据行

1) 标签索引选取:loc函数进行标签索引选取

可以将行标签传递给 loc 函数,来选取数据。示例如下:
import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(df.loc['b'])输出结果:
one 2.0
two 2.0
Name: b, dtype: float64
注意:loc 允许接两个参数分别是行和列,参数之间需要使用“逗号”隔开,但该函数只能接收标签索引。

2) 整数索引选取:iloc函数进行整数索引选取

  1. import pandas as pd
  2. d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  3. 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
  4. df = pd.DataFrame(d)
  5. print (df.iloc[2])

输出结果:

<span style="color:#444444">one   3.0
two   3.0
Name: c, dtype: float64</span>

注意:iloc 允许接受两个参数分别是行和列,参数之间使用“逗号”隔开,但该函数只能接收整数索引。

3) 切片操作多行选取

  1. import pandas as pd
  2. d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  3. 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
  4. df = pd.DataFrame(d)
  5. #左闭右开
  6. print(df[2:4])

输出结果:

<span style="color:#444444">   one  two
c  3.0    3
d  NaN    4</span>

添加数据行

使用 append() 函数,可以将新的数据行添加到 DataFrame 中,该函数会在行末追加数据行。

  1. import pandas as pd
  2. df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
  3. df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
  4. #在行末追加新数据行
  5. df = df.append(df2)
  6. print(df)

输出结果:

<span style="color:#444444">   a  b
0  1  2
1  3  4
0  5  6
1  7  8</span>

删除数据行

使用drop函数传入索引标签删除数据,从 DataFrame 中删除某一行数据。如果索引标签存在重复,那么它们将被一起删除。示例如下:

  1. import pandas as pd
  2. df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
  3. df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
  4. df = df.append(df2)
  5. print(df)
  6. #注意此处调用了drop()方法
  7. df = df.drop(0)
  8. print (df)

输出结果:

<span style="color:#444444">执行drop(0)前:a  b
0  1  2
1  3  4
0  5  6
1  7  8执行drop(0)后:a b
1 3 4
1 7 8</span>

在上述的示例中,默认使用 range(2) 生成了行索引,并通过 drop(0) 同时删除了两行数据。

常用属性和方法汇总

DataFrame 的属性和方法,与 Series 相差无几,如下所示:

名称 属性&方法描述
T 行和列转置。
axes 返回一个仅以行轴标签和列轴标签为成员的列表。
dtypes 返回每列数据的数据类型。
empty DataFrame中没有数据或者任意坐标轴的长度为0,则返回True。
ndim 轴的数量,也指数组的维数。
shape 返回一个元组,表示了 DataFrame 维度。
size DataFrame中的元素数量。
values 使用 numpy 数组表示 DataFrame 中的元素值。
head() 返回前 n 行数据。
tail() 返回后 n 行数据。
shift() 将行或列移动指定的步幅长度

shift()移动行或列

如果您想要移动 DataFrame 中的某一行/列,可以使用 shift() 函数实现。它提供了一个periods参数,该参数表示在特定的轴上移动指定的步幅。该函数的返回值是移动后的 DataFrame 副本。

shift() 函数的语法格式如下:

DataFrame.shift(periods=1, freq=None, axis=0)

参数说明如下:

参数名称 说明
peroids 类型为int,表示移动的幅度,可以是正数,也可以是负数,默认值为1。
freq 日期偏移量,默认值为None,适用于时间序。取值为符合时间规则的字符串。
axis 如果是 0 或者 "index" 表示上下移动,如果是 1 或者 "columns" 则会左右移动。
fill_value 该参数用来填充缺失值。

示例如下:

  1. import pandas as pd
  2. info= pd.DataFrame({'a_data': [40, 28, 39, 32, 18],
  3. 'b_data': [20, 37, 41, 35, 45],
  4. 'c_data': [22, 17, 11, 25, 15]})
  5. #移动幅度为3
  6. info.shift(periods=3)

输出结果:

<span style="color:#444444">a_data  b_data  c_data
0     NaN     NaN     NaN
1     NaN     NaN     NaN
2     NaN     NaN     NaN
3    40.0    20.0    22.0
4    28.0    37.0    17.0</span>

下面使用 fill_value 参数填充 DataFrame 中的缺失值,如下所示:

  1. import pandas as pd
  2. info= pd.DataFrame({'a_data': [40, 28, 39, 32, 18],
  3. 'b_data': [20, 37, 41, 35, 45],
  4. 'c_data': [22, 17, 11, 25, 15]})
  5. #移动幅度为3
  6. print(info.shift(periods=3))
  7. #将缺失值和原数值替换为52
  8. info.shift(periods=3,axis=1,fill_value= 52)

输出结果:

<span style="color:#444444">原输出结果:a_data  b_data  c_data
0     NaN     NaN     NaN
1     NaN     NaN     NaN
2     NaN     NaN     NaN
3    40.0    20.0    22.0
4    28.0    37.0    17.0替换后输出:a_data  b_data  c_data
0      52      52      52
1      52      52      52
2      52      52      52
3      52      52      52
4      52      52      52</span>

注意:fill_value 参数不仅可以填充缺失值,还也可以对原数据进行替换。

Pandas(二)--DataFrame结构相关推荐

  1. pandas(二) -- Dataframe创建及索引

    Dataframe创建 由数组/list组成的字典 data1 = {'a':[1,2,3],'b':[3,4,5],'c':[5,6,7]} df1 = pd.DataFrame(data1) pr ...

  2. python使用pandas模块介绍以及使用,dataframe结构,Series结构,基本数据操作,DataFrame运算,pandas画图,存储,缺失值处理,离散化,合并

    目录 1 pandas介绍 1.1 Pandas介绍 1.2 为什么使用Pandas 1.3 案例:在numpy当中创建的股票涨跌幅数据形式 1.4 DataFrame 1.4.1 DataFrame ...

  3. 【数据分析】认识Pandas:DataFrame和Series结构、属性

    数据分析工具--Pandas 认识Pandas Dataframe 结构 DataFrame 构造方法 dtype参数 Series 结构 Series 构造方法 DataFrame和Series属性 ...

  4. pandas中dataframe的构造(csv等结构化文件读取,字典读取)以及保存

    文章目录 前言 结构化文件读取 字典读取 numpy读取 保存dataframe 前言 pandas用来读取数据十分之方便和快速,可以提高你的效率,虽然numpy也有一些读取数据的api,但是通常我们 ...

  5. Python语言学习之pandas:DataFrame二维表的简介、常用函数、常用案例之详细攻略

    Python语言学习之pandas:DataFrame二维表的简介.常用函数.常用案例之详细攻略 目录 DataFrame的简介 DataFrame的常用案例 1.写入和读取excel表格文件

  6. 将pandas中Dataframe数据转换为二维数组array

    在实际的数据处理中,遇到将pandas中Dataframe的数据怎样去掉行列标签的问题,最后想到可以转化为二维数组来解决.思路如下: 一个Dataframe如下: pd: age astigmatic ...

  7. Python语言学习之pandas:DataFrame二维表的简介、常用函数、常用案例(增删改查排序之选择指定列、根据条件选择特定数据、赋值、列名重命名、修改列数据、处理缺失值、列合并、分组之详细攻略

    Python语言学习之pandas:DataFrame二维表的简介.常用函数.常用案例(增删改查排序之选择指定列.根据条件选择特定数据.赋值.列名重命名.修改列数据.处理缺失值.列合并.分组之详细攻略 ...

  8. 【Python】Pandas基础:结构化数据处理

    python:Pandas基础:结构化数据处理 目录: 文章目录 @[toc] 一 pandas及其重要性 二 pandas的数据结构介绍 1 Series 2 DataFrame 3 索引对象 三 ...

  9. Python数据分析pandas之dataframe初识

    Python数据分析pandas之dataframe初识 声明与简介 pandas是一个基于python的.快速的.高效.灵活.易用的开源的数据处理.分析包(工具)..pandas构建在numpy之上 ...

最新文章

  1. Lua 代码编写技巧
  2. 9.匿名函数:lambda表达式/filter()/map()
  3. java实现遍历树形菜单方法——OpenSessionView实现
  4. 常见的误解:这会创建多少个对象?
  5. 内核链表list.h文件剖析
  6. [js] 渲染树构建、布局及绘制
  7. Gartner发布云产品评估报告:阿里云计算能力全球第一 1
  8. centos 6.7 ssh 免密码
  9. 不容错过 DOCKERCON SF 2019 大会的 5 个理由
  10. 数据结构与程序的关系_java主程:数据结构和算法的区别别再搞混了,否则开除...
  11. getch函数c语言,C语言getchar getche getch函数比较
  12. sqlserver 执行计划
  13. 医学统计学计算机操作教程第3版附录答案,医学统计学课后习题集答案解析.doc...
  14. 【高手分享】熟知Win7系统(英文版)分区14个小步骤
  15. 格式工厂高清视频转换参数设置
  16. 计算机组成原理学习笔记(3.存储系统 4.指令系统)
  17. 20190408-相速度和群速度、傅里叶变换与波动方程的色散关系、介电常数与电导、介电函数与折射率、散度定理、电子迁移率、电磁波波动方程、自由电子气的介电函数
  18. matlab从无到有系列(六):高级图形处理功能(多窗口绘图以及花瓶绘制)
  19. AutoCAD .NET 二次开发实例:批量文本查找替换
  20. 鸢尾花分类(主成分分析)

热门文章

  1. 招商银行信用卡中心实习生招聘(第二批)题解
  2. 2011年度全球50个最佳网站
  3. 支撑百亿级应用的 NewSQL——TiDB 在同程旅游的应用 1
  4. 如何用计算机技术,如何利用计算机技术快速高效建立学籍档案
  5. MyBatis 动态元素 choose元素(when,otherwise)
  6. 【生成报名号+缴费成功】不代表考研报名成功!
  7. [原创]高熵合金分子动力学仿真---前篇
  8. 腰椎间盘突出,睡硬床垫还是软床垫好?听骨科医生答疑
  9. 防抱死制动系统(ABS)-Simulink仿真
  10. SIM卡运营商信息整理