网站登记备案查询,网站建设具体建设流程,电子商务网站建设的方法有哪些方面,做浏览单的网站有哪些文章目录一、DataFrame 结构简介二、DataFrame 对象创建1. 使用普通列表创建2. 使用嵌套列表创建3 指定数值元素的数据类型为 float4. 字典嵌套列表创建5. 添加自定义的行标签6. 列表嵌套字典创建 DataFrame 对象7. Series 创建 DataFrame 对象三、DataFrame 列操作1. 选取数据…
文章目录一、DataFrame 结构简介二、DataFrame 对象创建1. 使用普通列表创建2. 使用嵌套列表创建3 指定数值元素的数据类型为 float4. 字典嵌套列表创建5. 添加自定义的行标签6. 列表嵌套字典创建 DataFrame 对象7. Series 创建 DataFrame 对象三、DataFrame 列操作1. 选取数据列2. 列添加3. insert() 方法添加4. 删除数据列DataFrame 是 Pandas 的重要数据结构之一也是在使用 Pandas 进行数据分析过程中最常用的结构之一可以这么说掌握了 DataFrame 的用法你就拥有了学习数据分析的基本能力。
一、DataFrame 结构简介
DataFrame 是一个表格型的数据结构既有行标签index又有列标签columns它也被称异构数据表。所谓异构指的是表格中每列的数据类型可以不同比如可以是字符串、整型或者浮点型等。其结构图示意图如下所示 表格中展示了某个销售团队个人信息和绩效评级rating的相关数据。数据以行和列形式来表示其中每一列表示一个属性而每一行表示一个条目的信息。下表展示了上述表格中每一列标签所描述数据的数据类型如下所示 DataFrame 的每一列数据都可以看成一个 Series 结构只不过DataFrame 为每列数据值增加了一个列标签。因此 DataFrame 其实是从 Series 的基础上演变而来并且他们有相同的标签在数据分析任务中 DataFrame 的应用非常广泛因为它描述数据的更为清晰、直观。通过示例对 DataFrame 结构做进一步讲解。 下面展示了一张学生评分表如下所示 同 Series 一样DataFrame 自带行标签索引默认为隐式索引即从 0 开始依次递增行标签与 DataFrame 中的数据项一一对应。上述表格的行标签从 0 到 3共记录了 4 条数据图中将行标签省略。当然你也可以用“显式索引”的方式来设置行标签。下面对 DataFrame 数据结构的特点做简单地总结如下所示1 DataFrame 每一列的标签值允许使用不同的数据类型。2 DataFrame 是表格型的数据结构具有行和列。3 DataFrame 中的每个数据值都可以被修改。4 DataFrame 结构的行数、列数允许增加或者删除。5 DataFrame 有两个方向的标签轴分别是行标签和列标签。6 DataFrame 可以对行和列执行算术运算。
二、DataFrame 对象创建
Pandas DataFrame 是一个二维的数组结构类似二维数组。DataFrame 的语法模板如下
pandas.DataFrame(dataNone, indexNone, columnsNone, dtypeNone, copyNone)其参数含义如下
data 表示输入的数据可以是 ndarrayserieslistdict标量以及一个 DataFrame。index 表示行标签如果没有传递 index 值则默认行标签是 RangeIndex(0, 1, 2, …, n)n 代表 data 的元素个数。columns 表示列标签如果没有传递 columns 值则默认列标签是 RangeIndex(0, 1, 2, …, n)。dtype 表示要强制的数据类型。只允许使用一种数据类型。如果没有定义强制的数据类型就会自行推断。copy 表示从输入复制数据。对于 dict 数据copyTrue表示重新复制一份。对于 DataFrame 或 ndarray 输入类似于 copyFalse在原数据中进行操作。在开始之前我们需要先引入 numpy 和 pandas 库。
import numpy as np
import pandas as pd1. 使用普通列表创建
使用 DataFrame 数据结构进行输出。在这里我们并没有设置 index 和 columns因此他们就默认从 0 开始。DataFrame 不会输出数据类型。
data [1,2,3,4,5]
df pd.DataFrame(data)
print(df)
# 0
#0 1
#1 2
#2 3
#3 4
#4 5使用 Series 数据结构进行输出。Series 会输出对应的数据类型。
data [1,2,3,4,5]
df pd.Series(data)
print(df)
#0 1
#1 2
#2 3
#3 4
#4 5
#dtype: int642. 使用嵌套列表创建
列表中每个元素代表一行数据如果我们不分配列标签他们会默认从 0 开始进行计数。
data [[xiaowang,20],[Lily,30],[Anne,40]]
df pd.DataFrame(data)
print(df)
# 0 1
#0 xiaowang 20
#1 Lily 30
#2 Anne 40当我们分配列标签时会按我们分配的进行输出。这里需要注意的是我们分配的列标签必须和列数对应。
data [[xiaowang,20],[Lily,30],[Anne,40]]
df pd.DataFrame(data,columns[Name,Age])
print(df)
# Name Age
#0 xiaowang 20
#1 Lily 30
#2 Anne 403 指定数值元素的数据类型为 float
需要注意的是dtype 只能设置一个设置多个列的数据类型需要使用其他方式。当我们分配列标签时满足我们设定的数据类型会自动使用不满足则会自动识别。
data [[xiaowang, 20, 男, 5000],[Lily, 30, 男, 8000],[Anne, 40, 女, 10000]]
df pd.DataFrame(data,columns[Name,Age,gender, salary], dtypeint)
print(df)
print(df[salary].dtype)
# Name Age gender salary
#0 xiaowang 20 男 5000
#1 Lily 30 男 8000
#2 Anne 40 女 10000
#float644. 字典嵌套列表创建
data 字典中键对应的值的元素长度必须相同也就是列表长度相同。如果传递了索引那么索引的长度应该等于数组的长度如果没有传递索引那么默认情况下索引将是 RangeIndex(0.1…n)其中 n 代表数组长度。这里我们需要注意的时字典在 python 3.7 以后是有顺序的。例如我们通过字典创建 DataFrame输出行标签和列标签。
data {Name:[关羽, 刘备, 张飞, 曹操],Age:[28,34,29,42]}
df pd.DataFrame(data)
print(df)
print(df.index)
print(df.columns)
# Name Age
#0 关羽 28
#1 刘备 34
#2 张飞 29
#3 曹操 42
#RangeIndex(start0, stop4, step1)
#Index([Name, Age], dtypeobject)注意这里使用了默认行标签也就是 RangeIndex(0.1…n)。它生成了 0,1,2,3并分别对应了列表中的每个元素值。
5. 添加自定义的行标签
通过字典嵌套列表创建 DataFrame 并定义我们的行标签最后输出行标签和列标签。
data {Name:[关羽, 刘备, 张飞, 曹操],Age:[28,34,29,42]}
index [rank1, rank2, rank3, rank4]
df pd.DataFrame(data, indexindex)
print(df)
print(df.index)
print(df.columns)
# Name Age
#rank1 关羽 28
#rank2 刘备 34
#rank3 张飞 29
#rank4 曹操 42
#Index([rank1, rank2, rank3, rank4], dtypeobject)
#Index([Name, Age], dtypeobject)6. 列表嵌套字典创建 DataFrame 对象
列表嵌套字典可以作为输入数据传递给 DataFrame 构造函数。默认情况下字典的键被用作列名。
data [{a: 1, b: 2},{a: 5, b: 10, c: 20}]
df pd.DataFrame(data, index[first, second])
print(df)
# a b c
#first 1 2 NaN
#second 5 10 20.0注意如果其中某个元素值缺失也就是字典的 key 无法找到对应的 value将使用 NaN 代替。如何使用列表嵌套字典创建一个 DataFrame 对象可以设置结果需要那些列。
data [{a: 1, b: 2},{a: 5, b: 10, c: 20}]
df1 pd.DataFrame(data, index[first, second], columns[a, b])
df2 pd.DataFrame(data, index[first, second], columns[a, b1])
print(df1)
print(df1)
print(df2)
print(df2)
#df1
# a b
#first 1 2
#second 5 10
#df2
# a b1
#first 1 NaN
#second 5 NaN7. Series 创建 DataFrame 对象
也可以传递一个字典形式的 Series从而创建一个 DataFrame 对象其输出结果的行索引是所有 index 的合集。
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)
type(np.NaN)
# one two
#a 1.0 1
#b 2.0 2
#c 3.0 3
#d NaN 4
#float注意对于 one 列而言此处虽然显示了行索引 ‘d’但由于没有与其对应的值所以它的值为 NaN。当我们需要解决不同列的数据类型时可以使用设置自定义数据类型。
data {Name:pd.Series([xiaowang, Lily, Anne]),Age:pd.Series([20, 30, 40], dtypefloat),gender:pd.Series([男, 男, 女]),salary:pd.Series([5000, 8000, 10000], dtypefloat)
}
df pd.DataFrame(data)
df
# Name Age gender salary
#0 xiaowang 20.0 男 5000.0
#1 Lily 30.0 男 8000.0
#2 Anne 40.0 女 10000.0三、DataFrame 列操作
DataFrame 可以使用列标签来完成数据的选取、添加和删除操作。下面依次对这些操作进行介绍。
1. 选取数据列
可以使用列索引轻松实现数据选取。我们通过字典创建 DataFrame定义行标签单独选取每一列并输出。
data {Name:[关羽, 刘备, 张飞, 曹操],Age:[28,34,29,42]}
index [rank1, rank2, rank3, rank4]
df pd.DataFrame(data, indexindex)
print(df)
print(df[Name]:取得Name列)
print(df[Name])
print(df[Age]:取得Age列)
print(df[Age])
# Name Age
#rank1 关羽 28
#rank2 刘备 34
#rank3 张飞 29
#rank4 曹操 42
#df[Name]:取得Name列
#rank1 关羽
#rank2 刘备
#rank3 张飞
#rank4 曹操
#Name: Name, dtype: object
#df[Age]:取得Age列
#rank1 28
#rank2 34
#rank3 29
#rank4 42
#Name: Age, dtype: int64我们也可以同时选取很多列。
print(df[[Name, Age]]:df选取多列)
print(df[[Name, Age]])
#df[[Name, Age]]:df选取多列
# Name Age
#rank1 关羽 28
#rank2 刘备 34
#rank3 张飞 29
#rank4 曹操 42这里需要注意的是列不是能使用切片选取多列。
print(df不能使用切片选取多列)
print(df[Name: Age])
#df不能使用切片选取多列
#Empty DataFrame
#Columns: [Name, Age]
#Index: []如果我直接通过标签位置去获取列会报错。
df[1]2. 列添加
使用 columns 列索引标签可以实现添加新的数据列示例如下。首先我们创建初始数据。
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 two
#a 1.0 1
#b 2.0 2
#c 3.0 3
#d NaN 4然后使用 df[‘列’] 值插入新的数据列。
print (通过Series添加一个新的列:)
df[three]pd.Series([10,20,30],index[a,b,c])
print(df)
#通过Series添加一个新的列:
# one two three
#a 1.0 1 10.0
#b 2.0 2 20.0
#c 3.0 3 30.0
#d NaN 4 NaN我们也可以将已经存在的数据列相加运算从而创建一个新的列。
print (将已经存在的数据列相加运算,从而创建一个新的列:)
df[four]df[one]df[three]
print(df)
#将已经存在的数据列相加运算,从而创建一个新的列:
# one two three four
#a 1.0 1 10.0 11.0
#b 2.0 2 20.0 22.0
#c 3.0 3 30.0 33.0
#d NaN 4 NaN NaN如果我们新添加的列当中出现新的行标签就不会显示出来。
df[error]pd.Series([10,20,30],index[b,a,s3])
print(df)
# one two three four error
#a 1.0 1 10.0 11.0 20.0
#b 2.0 2 20.0 22.0 10.0
#c 3.0 3 30.0 33.0 NaN
#d NaN 4 NaN NaN NaN3. insert() 方法添加
在上述示例中我们初次使用了 DataFrame 的算术运算这和 NumPy 非常相似。除了使用 df[]value 的方式外您还可以使用 insert() 方法插入新的列其语法模板如下
df.insert(loc, column, value, allow_duplicatesFalse)其参数含义如下loc 表示整型插入索引必须验证 0loclen列。column 表示插入列的标签类型可以是字符串、数字或者散列对象。value 表示数值必须是 Series 或者数组。allow_duplicates 表示是否允许重复可以有相同的列标签数据默认为 False。具体可见如下例子我们先生成初始数据便于后续的操作。
info[[王杰,18],[李杰,19],[刘杰,17]]
dfpd.DataFrame(info,columns[name,age])
print(df)
# name age
#0 王杰 18
#1 李杰 19
#2 刘杰 17这里需要注意的是我们使用 column 参数。数值 1 代表插入到 columns 列表的索引位置。其中loc 代表整型插入索引必须验证 0loclen列。 df.insert(1,column‘score’,value[91,90,75])
print(df.insert插入数据:)
print(df)
#df.insert插入数据:
# name score age
#0 王杰 91 18
#1 李杰 90 19
#2 刘杰 75 17当然我们也可以添加重复列标签数据。
df.insert(1,columnscore,value[80,70,90],allow_duplicatesTrue)
print(df)
# name score score age
#0 王杰 80 91 18
#1 李杰 70 90 19
#2 刘杰 90 75 17此时如果我们单独提取出列标签是 score 的列那么两列就都会输出。
df[score]
#score score
#0 80 91
#1 70 90
#2 90 75如果我们将 allow_duplicates 参数设置为 False然后再插入具有相同列标签的数据就会报错。
df.insert(1,columnscore,value[80,70,90])
# 错误 cannot insert name, already exists4. 删除数据列
我们通过 del 和 pop() 都能够删除 DataFrame 中的数据列但区别是del 没有返回值而 pop 有返回值具体示例如下首先我们创建初始数据便于后面的对比操作。
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)
print (Our dataframe is:)
print(df)
#Our dataframe is:
# one two three
#a 1.0 1 10.0
#b 2.0 2 20.0
#c 3.0 3 30.0
#d NaN 4 NaN我们使用 del 方法进行删除操作。
del df[one]
print(del df[one])
print(df)
#del df[one]
# two three
#a 1 10.0
#b 2 20.0
#c 3 30.0
#d 4 NaN我们使用 pop 方法进行删除操作。由于pop 方法可以返回我们删除的数据因此在一定程度上也可以用来提取数据但是他也会修改我们的源数据。
res_pop df.pop(two)
print(df.pop(two))
print(df)
print(res_pop df.pop(two))
print(res_pop)
#df.pop(two)
# three
#a 10.0
#b 20.0
#c 30.0
#d NaN
#res_pop df.pop(two)
#a 1
#b 2
#c 3
#d 4
#Name: two, dtype: int64