一、Series的定义
Series是一种类似于一维数组的对象,由下面两个部分组成:
- values:一组数据(ndarray类型)
- index:相关的数据索引标签
二、Series的创建
# 导包
from pandas import Serice,DataFrame
# 由列表或数组创建(默认索引为0到N-1的整数型索引)
s = Series(index=list('abcd'),data=[1,2,3,4])
# 由字典创建
s = Series({'a': 1, 'b': 2, 'c': 3, 'd':4})
# 可以设置索引
s.index = list('abcd')
三、Series的索引和切片
s = Series(index=['张三','李四','王五'],data=np.random.randint(0,150)*3)
# 显式索引
- s['张三'] # 282
- s.loc['张三'] # 282
- s.loc[['张三']] # 张三 282
# 隐式索引
- s.iloc[0] # 282
# 切片
- s['张三':'李四'] # 张三 282 李四 282
- s.loc['张三':'李四'] # 张三 282 李四 282
- s.iloc[0:2] # 张三 282 李四 282
四、Series的运算
1、适用于numpy的数组运算也适用于Series
2、Series之间的运算
- 在运算中自动对齐不同索引的数据
- 如果索引不对应,则补NaN(series没有广播机制!!!)
注意:要想保留所有的index,则需要使用.add()函数
五、DataFrame的定义
DataFrame是一个【表格型】的数据结构,可以看做是【由Series组成的字典】(共用同一个索引)。
DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。
DataFrame既有行索引,也有列索引。
- 行索引:index
- 列索引:columns
- 值:values(numpy的二维数组)
六、DataFrame的创建
index = ['张三','李四','王五','赵六']
columns = ['语文','数学','英语','理综']
data = np.random.randint(0,150,size=(4,4))
df = DataFrame(index=index,columns=columns,data=data)
df
七、DataFrame的索引和切片
# 行索引
- df.loc['张三']
- df.loc['张三']['数学']
# 列索引
- df['数学']
- df['数学']['张三']
# 隐式索引
- df.iloc[0]
- df.iloc[0][1]
# 切片
- 行切片:df['张三':'李四']
- 列没有切片:df[['语文','数学']]
- 隐式索引切片:df.iloc[0:2]
八、DataFrame的运算
1、DataFrame之间的运算
同Series一样:
- 在运算中自动对齐不同索引的数据
- 如果索引不对应,则补NaN
- 要想在运算过程中,保留原有的数据,则需要使用操作函数来实现
下面是Python 操作符与pandas操作函数的对应表:
Python Operator | Pandas Method(s) |
---|---|
+ |
add() |
- |
sub() , subtract()
|
* |
mul() , multiply()
|
/ |
truediv() , div() , divide()
|
// |
floordiv() |
% |
mod() |
** |
pow() |
2、Series与DataFrame之间的运算
-
使用Python操作符:以行为单位操作(参数必须是行),对所有行都有效。(类似于numpy中二维数组与一维数组的运算,但可能出现NaN)
-
使用pandas操作函数:
axis=0:以列为单位操作(参数必须是列),对所有列都有效。
axis=1:以行为单位操作(参数必须是行),对所有行都有效。
九、DataFrame处理丢失数据
有两种丢失数据:
- None:None是python自带的,其类型为python object。因此,None不能参与到任何计算中。
- np.nan:np.nan是浮点型类型,能参与到计算中。但计算的结果总是为NaN。但是:可以使用
np.nan*()函数来计算nan,此时视nan为0。
1) pandas中None和np.nan都视为np.nan
2) pandas中None和np.nan的操作:
- isnull():是null的显示True
- notnull():不是null的显示True
- dropna(how='any',axis=0):过滤丢失数据(axis=0,对行操作,axis=1,对列操作。how='any',任意一个符合,就作用整行或整列,how='all',整行或整列符合才作用。)
- fillna(methods=None,axis=None):(前向/后向)填充丢失数据(methods='ffill/bfill',axis='0/1'),axis=0,看列的前后向,axis=1,看行的前后向。
网友评论