其他
pandas入门:Series、DataFrame、Index基本操作都有了!
导读:pandas是一款开放源码的BSD许可的Python库。它基于NumPy创建,为Python编程语言提供了高性能的、易于使用的数据结构和数据分析工具。
作者:李明江 张良均 周东平 张尚佳
来源:大数据DT(ID:hzdashuju)
Series:基本数据结构,一维标签数组,能够保存任何数据类型 DataFrame:基本数据结构,一般为二维数组,是一组有序的列 Index:索引对象,负责管理轴标签和其他元数据(比如轴名称) groupby:分组对象,通过传入需要分组的参数实现对数据分组 Timestamp:时间戳对象,表示时间轴上的一个时刻 Timedelta:时间差对象,用来计算两个时间点的差值
class pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
data:接收array或dict。表示接收的数据。默认为None index:接收array或list。表示索引,它必须与数据长度相同。默认为None name:接收string或list。表示Series对象的名称。默认为None
代码清单6-1 通过ndarray创建Series
import pandas as pd
import numpy as np
print('通过ndarray创建的Series为:\n',
pd.Series(np.arange(5), index = ['a', 'b', 'c', 'd', 'e'], name = 'ndarray'))
输出:
通过ndarray创建的Series为:
a 0
b 1
c 2
d 3
e 4
Name: ndarray, dtype: int32
代码清单6-2 通过dict创建Series
dit = {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4}
print('通过dict创建的Series为:\n', pd.Series(dit))
通过dict创建的Series为:
a 0
b 1
c 2
d 3
e 4
dtype: int64
代码清单6-3 通过list创建Series
list1 = [0, 1, 2, 3, 4]
print('通过list创建的Series为:\n', pd.Series(list1, index = ['a', 'b', 'c', 'd', 'e'], name = 'list'))
通过list创建的Series为:
a 0
b 1
c 2
d 3
e 4
Name: list, dtype: int64
values:以ndarray的格式返回Series对象的所有元素 index:返回Series对象的索引 dtype:返回Series对象的数据类型 shape:返回Series对象的形状 nbytes:返回Series对象的字节数 ndim:返回Series对象的维度 size:返回Series对象的个数 T:返回Series对象的转置
代码清单6-4 访问Series的属性
series = pd.Series(list1, index = ['a', 'b', 'c', 'd', 'e'], name = 'list')
print('数组形式返回Series为:', series.values)
#输出:数组形式返回Series为: [0 1 2 3 4]
print('Series的Index为:', series.index)
#输出:Series的Index为:Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
print('Series的形状为:', series.shape)
#输出:Series的形状为: (5,)
print('Series的维度为:', series.ndim)
#输出:Series的维度为:1
代码清单6-5 通过索引位置访问Series数据子集
print('Series位于第1位置的数据为:', series[0])
Series位于第1位置的数据为: 0
代码清单6-6 通过索引名称访问Series数据
print('Series中Index为a的数据为:', series['a'])
Series中Index为a的数据为: 0
代码清单6-7 通过bool数组访问Series数据
bool = (series < 4)
print('bool类型的Series为:\n', bool)
输出:
bool类型的Series为:
a True
b True
c True
d True
e False
Name: list, dtype: bool
print('通过bool数据访问Series结果为:\n', series[bool])
通过bool数据访问Series结果为:
a 0
b 1
c 2
d 3
Name: list, dtype: int64
代码清单6-8 更新Series
# 更新元素
series['a'] = 3
print('更新后的Series为:\n', series)
更新后的Series为:
a 3
b 1
c 2
d 3
e 4
Name: list, dtype: int64
代码清单6-9 追加Series和插入单个值
series1 = pd.Series([4, 5], index = ['f', 'g'])
# 追加Series
print('在series插入series1后为:\n', series.append(series1))
在series插入series1后为:
a 3
b 1
c 2
d 3
e 4
f 4
g 5
dtype: int64
# 新增单个数据
series1['h'] = 7
print('在series1插入单个数据后为:\n', series1)
在series1插入单个数据后为:
f 4
g 5
h 7
dtype: int64
代码清单6-10 删除Series元素
# 删除数据
series.drop('e', inplace = True)
print('删除索引e对应数据后的series为:\n', series)
输出:
删除索引e对应数据后的series为:
a 3
b 1
c 2
d 3
Name: list, dtype: int64
class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
data:接收ndarray,dict,list或DataFrame。表示输入数据。默认为None index:接收Index,ndarray。表示索引。默认为None columns:接收Index,ndarray。表示列标签(列名)。默认为None
代码清单6-11 通过dict创建DataFrame
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
代码清单6-12 通过list创建DataFrame
list2 = [[0, 5], [1, 6], [2, 7], [3, 8], [4, 9]]
print('通过list创建的DataFrame为:\n',
pd.DataFrame(list2, index = ['a', 'b', 'c', 'd', 'e'], columns = ['col1', 'col2']))
通过list创建的DataFrame为:
col1 col2
a 0 5
b 1 6
c 2 7
d 3 8
e 4 9
values:以ndarray的格式返回DataFrame对象的所有元素 index:返回DataFrame对象的Index columns:返回DataFrame对象的列标签 dtypes:返回DataFrame对象的数据类型 axes:返回DataFrame对象的轴标签 ndim:返回DataFrame对象的轴尺寸数 size:返回DataFrame对象的个数 shape:返回DataFrame对象的形状
代码清单6-13 访问DataFrame的属性
df = pd.DataFrame({'col1': [0, 1, 2, 3, 4], 'col2': [5, 6, 7, 8, 9]},
index = ['a', 'b', 'c', 'd', 'e'])
print('DataFrame的Index为:', df.index)
#输出:DataFrame的Index为:Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
print('DataFrame的列标签为:', df.columns)
#输出:DataFrame的列标签为:Index(['col1', 'col2'], dtype='object')
print('DataFrame的轴标签为:', df.axes)
#输出:DataFrame的轴标签为: [Index(['a', 'b', 'c', 'd', 'e'], dtype='object'), Index(['col1', 'col2'], dtype='object')]
print('DataFrame的维度为:', df.ndim)
#输出:DataFrame的维度为:2
print('DataFrame的形状为:', df.shape)
#输出:DataFrame的形状为: (5, 2)
代码清单6-14 访问DataFrame前后n行数据
print('默认返回前5行数据为:\n', df.head())
输出:
默认返回前5行数据为:
col1 col2
a 0 5
b 1 6
c 2 7
d 3 8
e 4 9
print('返回后3行数据为:\n', df.tail(3))
输出:
返回后3行数据为:
col1 col2
c 2 7
d 3 8
e 4 9
代码清单6-15 更新DataFrame
# 更新列
df['col1'] = [10, 11, 12, 13, 14]
print('更新列后的DataFrame为:\n', df)
更新列后的DataFrame为:
col1 col2
a 10 5
b 11 6
c 12 7
d 13 8
e 14 9
代码清单6-16 采用赋值的方法插入列
# 插入列
df['col3'] = [15, 16, 17, 18, 19]
print('插入列后的DataFrame为:\n', df)
插入列后的DataFrame为:
col1 col2 col3
a 10 5 15
b 11 6 16
c 12 7 17
d 13 8 18
e 14 9 19
DataFrame.drop(labels, axis=0, level=None, inplace=False, errors='raise')
labels:接收string或array。表示删除的行或列的标签。无默认值 axis:接收0或1。表示执行操作的轴向,其中0表示删除行,1表示删除列。默认为0 levels:接收int或者索引名。表示索引级别。默认为None inplace:接收bool。表示操作是否对原数据生效。默认为False
代码清单6-17 使用drop方法删除数据
# 删除列
df.drop(['col3'], axis = 1, inplace = True)
print('删除col3列后的DataFrame为:\n', df)
删除col3列后的DataFrame为:
col1 col2
a 10 5
b 11 6
c 12 7
d 13 8
e 14 9
# 删除行
df.drop('a', axis = 0, inplace = True)
print('删除a行后的DataFrame为:\n', df)
删除a行后的DataFrame为:
col1 col2
b 11 6
c 12 7
d 13 8
e 14 9
Index:一般的Index对象 MultiIndex:层次化Index对象 DatetimeIndex:Timestamp索引对象 PeriodIndex:Period索引对象
代码清单6-18 访问Series索引
print('series的Index为 :\n', series.index)
series的Index为 :
Index(['a', 'b', 'c', 'd'], dtype='object')
is_monotonic:当各元素均大于前一个元素时,返回True is_unique:当Index没有重复值时,返回True
代码清单6-19 访问Index属性
print('series中Index各元素是否大于前一个:', series.index.is_monotonic)
#输出:series中Index各元素是否大于前一个:True
print('series中Index各元素是否唯一:', series.index.is_unique)
#输出:series中Index各元素是否唯一:True
append:连接另一个Index对象,产生一个新的Index difference:计算两个Index对象的差集,得到一个新的Index intersection:计算两个Index对象的交集 union:计算两个Index对象的并集 isin:计算一个Index是否在另一个Index,返回bool数组 delete:删除指定Index的元素,并得到新的Index drop:删除传入的值,并得到新的Index insert:将元素插入到指定Index处,并得到新的Index unique:计算Index中唯一值的数组
代码清单6-20 应用Index对象的常用方法
index1 = series.index
index2 = series1.index
print('index1连接index2后结果为:\n', index1.append(index2))
#输出:index1连接index2后结果为:
# Index(['a', 'b', 'c', 'd', 'f', 'g', 'h'], dtype='object')
print('index1与index2的差集为:', index1.difference(index2))
#输出:index1与index2的差集为:Index(['a', 'b', 'c', 'd'], dtype='object')
print('index1与index2的交集为:', index1.intersection(index2))
#输出:index1与index2的交集为:Index([], dtype='object')
print('index1与index2的并集为:\n', index1.union(index2))
#输出:index1与index2的并集为:
# Index(['a', 'b', 'c', 'd', 'f', 'g', 'h'], dtype='object')
print('index1中的元素是否在index2中:', index1.isin(index2))
#输出:index1中的元素是否在index2中: [False False False False]
延伸阅读《Python3智能数据分析快速入门》
点击上图了解及购买
转载请联系微信:DoctorData
更多精彩👇