Pandas(二)--DataFrame结构
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 对象的语法格式如下:
- import pandas as pd
- 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函数进行整数索引选取
- 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.iloc[2])
输出结果:
<span style="color:#444444">one 3.0
two 3.0
Name: c, dtype: float64</span>
注意:iloc 允许接受两个参数分别是行和列,参数之间使用“逗号”隔开,但该函数只能接收整数索引。
3) 切片操作多行选取
- 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[2:4])
输出结果:
<span style="color:#444444"> one two
c 3.0 3
d NaN 4</span>
添加数据行
使用 append() 函数,可以将新的数据行添加到 DataFrame 中,该函数会在行末追加数据行。
- import pandas as pd
- df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
- df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
- #在行末追加新数据行
- df = df.append(df2)
- print(df)
输出结果:
<span style="color:#444444"> a b
0 1 2
1 3 4
0 5 6
1 7 8</span>
删除数据行
使用drop函数传入索引标签删除数据,从 DataFrame 中删除某一行数据。如果索引标签存在重复,那么它们将被一起删除。示例如下:
- import pandas as pd
- df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
- df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
- df = df.append(df2)
- print(df)
- #注意此处调用了drop()方法
- df = df.drop(0)
- 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 | 该参数用来填充缺失值。 |
示例如下:
- import pandas as pd
- info= pd.DataFrame({'a_data': [40, 28, 39, 32, 18],
- 'b_data': [20, 37, 41, 35, 45],
- 'c_data': [22, 17, 11, 25, 15]})
- #移动幅度为3
- 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 中的缺失值,如下所示:
- import pandas as pd
- info= pd.DataFrame({'a_data': [40, 28, 39, 32, 18],
- 'b_data': [20, 37, 41, 35, 45],
- 'c_data': [22, 17, 11, 25, 15]})
- #移动幅度为3
- print(info.shift(periods=3))
- #将缺失值和原数值替换为52
- 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结构相关推荐
- pandas(二) -- Dataframe创建及索引
Dataframe创建 由数组/list组成的字典 data1 = {'a':[1,2,3],'b':[3,4,5],'c':[5,6,7]} df1 = pd.DataFrame(data1) pr ...
- python使用pandas模块介绍以及使用,dataframe结构,Series结构,基本数据操作,DataFrame运算,pandas画图,存储,缺失值处理,离散化,合并
目录 1 pandas介绍 1.1 Pandas介绍 1.2 为什么使用Pandas 1.3 案例:在numpy当中创建的股票涨跌幅数据形式 1.4 DataFrame 1.4.1 DataFrame ...
- 【数据分析】认识Pandas:DataFrame和Series结构、属性
数据分析工具--Pandas 认识Pandas Dataframe 结构 DataFrame 构造方法 dtype参数 Series 结构 Series 构造方法 DataFrame和Series属性 ...
- pandas中dataframe的构造(csv等结构化文件读取,字典读取)以及保存
文章目录 前言 结构化文件读取 字典读取 numpy读取 保存dataframe 前言 pandas用来读取数据十分之方便和快速,可以提高你的效率,虽然numpy也有一些读取数据的api,但是通常我们 ...
- Python语言学习之pandas:DataFrame二维表的简介、常用函数、常用案例之详细攻略
Python语言学习之pandas:DataFrame二维表的简介.常用函数.常用案例之详细攻略 目录 DataFrame的简介 DataFrame的常用案例 1.写入和读取excel表格文件
- 将pandas中Dataframe数据转换为二维数组array
在实际的数据处理中,遇到将pandas中Dataframe的数据怎样去掉行列标签的问题,最后想到可以转化为二维数组来解决.思路如下: 一个Dataframe如下: pd: age astigmatic ...
- Python语言学习之pandas:DataFrame二维表的简介、常用函数、常用案例(增删改查排序之选择指定列、根据条件选择特定数据、赋值、列名重命名、修改列数据、处理缺失值、列合并、分组之详细攻略
Python语言学习之pandas:DataFrame二维表的简介.常用函数.常用案例(增删改查排序之选择指定列.根据条件选择特定数据.赋值.列名重命名.修改列数据.处理缺失值.列合并.分组之详细攻略 ...
- 【Python】Pandas基础:结构化数据处理
python:Pandas基础:结构化数据处理 目录: 文章目录 @[toc] 一 pandas及其重要性 二 pandas的数据结构介绍 1 Series 2 DataFrame 3 索引对象 三 ...
- Python数据分析pandas之dataframe初识
Python数据分析pandas之dataframe初识 声明与简介 pandas是一个基于python的.快速的.高效.灵活.易用的开源的数据处理.分析包(工具)..pandas构建在numpy之上 ...
最新文章
- Lua 代码编写技巧
- 9.匿名函数:lambda表达式/filter()/map()
- java实现遍历树形菜单方法——OpenSessionView实现
- 常见的误解:这会创建多少个对象?
- 内核链表list.h文件剖析
- [js] 渲染树构建、布局及绘制
- Gartner发布云产品评估报告:阿里云计算能力全球第一 1
- centos 6.7 ssh 免密码
- 不容错过 DOCKERCON SF 2019 大会的 5 个理由
- 数据结构与程序的关系_java主程:数据结构和算法的区别别再搞混了,否则开除...
- getch函数c语言,C语言getchar getche getch函数比较
- sqlserver 执行计划
- 医学统计学计算机操作教程第3版附录答案,医学统计学课后习题集答案解析.doc...
- 【高手分享】熟知Win7系统(英文版)分区14个小步骤
- 格式工厂高清视频转换参数设置
- 计算机组成原理学习笔记(3.存储系统 4.指令系统)
- 20190408-相速度和群速度、傅里叶变换与波动方程的色散关系、介电常数与电导、介电函数与折射率、散度定理、电子迁移率、电磁波波动方程、自由电子气的介电函数
- matlab从无到有系列(六):高级图形处理功能(多窗口绘图以及花瓶绘制)
- AutoCAD .NET 二次开发实例:批量文本查找替换
- 鸢尾花分类(主成分分析)