第六章 Pandas基础
Pandas是一款开放源码的BSD许可的Python库,它基于Numpy创建,为Python编程语言提供了高性能的、易于使用的数据结构和数据分析工具。(虽然此熊猫非彼熊猫)
Pandas常用类
类别 | 说明 |
---|---|
Series | 基本数据结构,一维标签数组,能够保存任何数据类型 |
DataFrame | 基本数据结构,一般为二维数组,是一组有序的列 |
Index | 索引对象,负责管理轴标签和其他元数据(比如轴名称) |
groupy | 分组对象,负责传入需要分组的参数实现对数据分组 |
Timestamp | 时间戳对象,表示时间轴上的一个时刻 |
Timedelta | 时间差对象,用来计算两个时间点的差值 |
Series
Series本质上是一个ndarray,通过ndarray创建Series对象
class pandas.Series(data = None,index = None, dtype = None, name = None, copy = false, fastpath = False)
DataFrame
DataFrame是pandas基本数据结构,类似数据库中的表。DataFrame既有行索引,也有列索引,它可以看作Series组成的dict,每个Series看作DataFrame的一个列。
class pandas.DataFrame(data=None,index =None,columns = None,dtype = None,copy = False)
DataFrame的基本操作包括索引操作、排序与重置、数据合并。
索引方式包括3个方面:基础索引方式、loc方法和iloc方法、层次化索引。loc方法基于索引名称,iloc方法基于索引位置。
loc方法是基于名称的索引方法,它接收索引名称(标签),若索引名称不存在则会报错。
loc方法也能接收整数,但这个整数必须是已存在的索引名称。
iloc方法完全基于位置,它接收int,不能接收索引名称,否则会报错。iloc的用法与NumPy中ndarray的数字索引方式完全相同。
Index
Index对象为其余pandas对象储存轴标签。管理轴标签和其他元数据(如轴名称)。创建series或DataFrame等对象时,索引都会被转换为Index对象。主要Index对象包括Index(一般化的Index对象),MultiIndex(层次化Index对象),DatatimeIndex(Timestamp索引对象)、PeriodIndex(Periods索引对象)。
Index对象可以通过pandas.Index()函数创建,也可以通过创建数据对象Series、DataFrame时接受index(或column)参数创建,前者属于显式创建,后者属于隐式创建。
第六章课后题概述
-
C
在pandas,我们有一维数据——Series,有二维数据——DataFrame,那么,我们有时候有三维数据的需求,pandas提供三维数据结构——panel。新版的pandas库已经移除了数据结构panel。 -
D
data表示接收的的数据,接收array或dict; index表示索引,必须与数据长度相同,接收array或list,name表示Series对象的名称,接收string或list。 -
D
C项可结合布尔型索引得到相应的结果 -
D
删除列的方法有多种如del、pop、drop等。常用的是pop方法,它可以删除行或者列。 -
C
创建的Index对象不可以修改,保证了Index对象在各个数据结构之间的安全共享。对于D项,使用unique()函数,可以计算Index中唯一值的数组。 -
D
loc方法基于索引名称,基本语法格式如DataFrame.loc[行索引名称或条件,列索引名称]; iloc方法基于索引位置,基本语法格式如DataFrame.iloc[行索引位置,列索引位置] -
D
how表示数据的连接方式,接受inner、outer、left和right,默认为inner。join()方法为DataFrame的堆叠合并方法。 -
B
replace方法用于替换字符串,但与Python内建的str方法在用法上可能有所不同;文本既可以通过slice方法截取字符,实现索引操作,也可以通过”[ ]”符号实现索引操作,这是基于位置的。若输入位置超过索引,则返回NaN。“文本处理的方法让操作数组上的每一个元素变得容易”、少量文本处理方法是特有的,如cat、get等。 -
D
结合意义说明,Timestamp是时间戳,为具体时间点; Period为事件段,表示的意义是不同的。 -
ABCD
通过pandas.Categorical,pandas.cut都可以创建category,设置Series的dtype参数为category和转换Series数据类为category也都可以创建category。 -
填空题
(1)对DataFrame按指定列排序的方法是sort_index(axis = 1)
(2)通过append方法能够在原Series上插入(追加)新的Series。
(3)设置DataFrame的drop方法的axis参数为0可以删除行
(4)层次化索引对应的类是MultiIndex。
(5)CategoricalDtype是category的专用类型,它还可以锁定排序。 -
创建一个DataFrame
import pandas as pd
dict1 = {'col1': [0, 1, 2, 3, 4], 'col2': [5, 6, 7, 8, 9]}
print('通过dict创建的DataFrame为:\n', pd.DataFrame(dict1, index = ['a', 'b', 'c', 'd', 'e']))
通过dict创建的DataFrame为:
col1 col2
a 0 5
b 1 6
c 2 7
d 3 8
e 4 9
- DataFrame操作
# 创建DataFrame
import pandas as pd
d = {'col1':[0, 3, 6, 9],'col2':[1, 4, 7, 10],'col3':[2, 8, 5, 11]}
df = pd.DataFrame(d,index=['a','b','c','f'])
print(df)
# 筛选出列名为“col2”的列大于4的所有数据
# df.loc[df['col2']>4,:]
print(df.loc[df['col2']>4,:])
# 删除列名为“col2”的列
# df.drop(columns=['col2'])
print(df.drop(columns=['col2']))
# 按列名为“col3”的列降序排列DataFrame
# df.sort_values(by='col3', ascending=False)
print(df.sort_values(by='col3', ascending=False))
col1 col2 col3
a 0 1 2
b 3 4 8
c 6 7 5
f 9 10 11
col1 col2 col3
c 6 7 5
f 9 10 11
col1 col3
a 0 2
b 3 8
c 6 5
f 9 11
col1 col2 col3
f 9 10 11
b 3 4 8
c 6 7 5
a 0 1 2
- 计算元素长度
#创建DataFrame
d1 = {'col1':['ab', 'abc', None],'col2':[2, 3, 4]}
df1 = pd.DataFrame(d1,index=['a','b','c'])
print(df1)
# 统计元素长度
# df1['col1'].str.len()
print(df1['col1'].str.len())
col1 col2
a ab 2
b abc 3
c None 4
a 2.0
b 3.0
c NaN
Name: col1, dtype: float64
注:代码除部分经本人修改外,主要来自 机械工业出版社的《Python3智能数据分析快速入门》 的配套资料。