索引
单级索引
loc方法
DataFrame.loc通过标签或布尔数组访问一组行和列。
允许的输入为:
单个标签,例如5或’a’,(请注意,它5被解释为索引的标签,而不是沿索引的整数位置)。
标签列表或数组,例如。[‘a’, ‘b’, ‘c’]
带有标签的切片对象,例如’a’:’f’。警告:需要注意的是违背了普通的Python片,都开始和停止都包括
与要切片的轴长度相同的布尔数组,例如。[True, False, True]
一个callable带有一个参数的函数(调用Series或DataFrame),并返回有效的输出以进行索引(上述之一)
Note:当loc使用[] 索引全部index时返回Series,而使用 [[ ]]则返回DataFrame
iloc方法
DataFrame.iloc基于位置的纯基于整数位置的索引。
允许的输入为:
整数,例如5。
整数列表或数组,例如。[4, 3, 0]
具有整数的切片对象,例如1:7。与loc不同切片不包含右端点。
布尔数组
一个callable具有一个参数的函数(调用Series或DataFrame),并且返回用于索引的有效输出(上述之一)。当您没有对调用对象的引用,但希望基于某个值进行选择时,这在方法链中很有用。
[ ]操作符
Series的[]操作
单元素索引:
df['name']
多行索引:
df[0:4]
函数式索引:
df[lambda x: f(x)]
.f(x)应返回一个元素切片。df[f(df)]
.f(df)应返回一个与轴长相同大小的布尔数组。
DataFrame的[]操作
- 单行,多行索引。单列索引要获得某个元素时,先使用get_loc方法,如:
1 | row = df.index.get_loc("XXX") |
单列,多列索引
函数式索引
布尔索引
Note: 一般来说,[]操作符常用于列选择或布尔选择,尽量避免行的选择
布尔符号:’&’, ‘|’, ‘~’:分别代表和and,或or,取反not.
布尔索引的操作一般在loc和[]中进行。
isin方法
**DataFrame.isin(self, values) → ‘DataFrame’**返回一个显示DataFrame中的每个元素是否包含在值中的DataFrame(values为boolean).
当values是列表时,请检查列表中是否存在DataFrame中的每个值
当values是dict时,我们可以传递值以分别检查每一列:
当values是Series或DataFrame时,索引和列必须匹配。
at和iat方法
当只需要取一个元素时,at和iat方法能够提供更快的实现.
interval_range方法
**pandas.interval_range(start=None, end=None, periods=None, freq=None, name=None, closed=’right’)**返回一个fixed
frequency的IntervalIndex。
closed参数可选’left’’right’’both’’neither’,默认左开右闭
periods参数控制区间个数
freq控制步长
name该IntervalIndex的名称
cut方法
pandas.cut(x, bins, right: bool = True, labels=None, retbins: bool = False, precision: int = 3, include_lowest: bool =
False, duplicates: str = ‘raise’)
利用cut将数值列转为区间为元素的分类变量,
x: 输入数组, 必须是一维的
bins:(int,sequence of scalars或IntervalIndex) int:定义x范围内的等宽bin数。x的范围在每一侧都扩展了0.1%,以包括x的最小值和最大值。 sequence of
scalars:定义bin边缘以允许非均匀宽度。x的范围没有扩展。 IntervalIndex:定义要使用的确切容器。请注意,bin的 IntervalIndex 必须不重叠。right (Boolean): 是否包括右端点
多级索引 MultiIndex
1. 创建多级索引
- 先创建元组(zip方法), Array等, 再调用MultiIndex中from_tuple, from_arrays, from_product.
1 | arrays = [['A','a'],['A','b'],['B','a'],['B','b']] |
- 直接调用set_index方法, 指定df中的列创建.
1 | df_using_mul = df.set_index(['Class','Address']) |
2. 多层索引切片
切片前要对索引进行排序, 否则报出性能警告或直接报错.
3. 多层索引中的slice对象
通过 idx=pd.IndexSlice
获取slice对象, 以更轻松地执行多索引切片.
4. 索引层的交换
DataFrame.swaplevel(self, i=-2, j=-1, axis=0) → ‘DataFrame’ 在特定轴上的MultiIndex中交换级别i和j.
DataFrame.reorder_levels(self, order, axis=0) → ‘DataFrame’ 使用输入顺序重新排列索引级别。
索引设定
1. index_col参数
index_col是read_csv中的一个参数,而不是某一个方法:
1 | pd.read_csv('data/table.csv',index_col=['Address','School']).head() |
2. reindex与reindex_like方法
**DataFrame.reindex(self, labels=None, index=None, columns=None, axis=None, method=None, copy=True, level=None,
fill_value=nan, limit=None, tolerance=None)**使用可选的填充逻辑使DataFrame符合新索引。
DataFrame.reindex_like(self: ~FrameOrSeries, other, method: Union[str, NoneType] = None, copy: bool = True,
limit=None, tolerance=None) → ~FrameOrSeries为生成一个横纵索引完全与参数列表一致的DataFrame,数据使用被调用的表.
- method:{None, ‘backfill’/’bfill’, ‘pad’/’ffill’, ‘nearest’}
用于在重新索引的 DataFrame中填充孔的方法。请注意:这仅适用于具有单调递增/递减索引的DataFrames / Series。
None(默认):不填补空白
backfill/bfill:将上一个有效观察值向前传播到下一个有效值。
pad/ffill:使用下一个有效观察值填充空白。
nearest:使用最近的有效观测值来填补空白。
- fill_value: 标量,默认为np. NaN. 用于填充缺失值的值。默认为NaN,但可以是任何“兼容”值。
3. set_index与reset_index方法
**DataFrame.set_index(self, keys, drop=True, append=False, inplace=False, verify_integrity=False)**使用现有列设置DataFrame索引。
**DataFrame.reset_index(self, level: Union[Hashable, Sequence[Hashable], NoneType] = None, drop: bool = False, inplace:
bool = False, col_level: Hashable = 0, col_fill: Union[Hashable, NoneType] = ‘’) →
Union[ForwardRef(‘DataFrame’), NoneType]**重置索引或索引的级别。
inplace: bool, default False 就地修改DataFrame(不创建新的对象)
dropbool, default False 不要尝试将索引插入数据框列。这会将索引重置为默认的整数索引
col_levelint or str, default 0 如果列有多个级别,请确定将标签插入到哪个级别。默认情况下,它被插入第一级。
col_fillobject, default ‘’ 如果列具有多个级别,请确定如何命名其他级别。如果为None,则重复索引名称。
appendbool, default False 是否将列追加到现有索引。
verify_integrity bool,default False 检查新索引是否重复。否则,将检查推迟到必要时进行。设置为False将提高此方法的性能。
4. rename_axis和rename方法
DataFrame.rename_axis(self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False)
rename_axis是针对多级索引的方法,作用是修改某一层的索引名,而不是索引标签.
*DataFrame.rename(mapper=None, , index=None, columns=None, axis=None, copy=True, inplace=False, level=None,
errors=’ignore’) -> DataFrame
rename方法用于修改列或者行索引标签,而不是索引名
index, columnsscalar, list-like, dict-like or function, optional 标量,类似于列表,类似于dict或函数的转换,以应用于该轴的值.
使用mapper和axis可以使用mapper或index 和/或指定要指定的轴columns。axis{0 or ‘index’, 1 or ‘columns’}, default 0 重命名的轴
常用索引型函数
1.where方法
DataFrame.where(self, cond, other=nan, inplace=False, axis=None, level=None, errors=’raise’, try_cast=False)
condbool Series/DataFrame, array-like, or callable 如果 cond为True,请保留原始值。如果为 False,则用other中的相应值替换。如果cond是可调用的,则它是在Series
/ DataFrame上计算的,并且应返回布尔Series / DataFrame或数组。可调用对象不得更改输入Series / DataFrame(尽管pandas不会对其进行检查)。otherscalar, Series/DataFrame, or callable 如果other是可调用的,则在Series / DataFrame上对其进行计算,并应返回标量或Series /
DataFrame。可调用对象不得更改输入Series / DataFrame
2. mask函数
mask函数与where功能上相反,其余完全一致,即对条件为True的单元进行填充
3. query函数
**DataFrame.query(self, expr, inplace=False, kwargs)
使用布尔表达式查询 DataFrame的列
query函数中的布尔表达式中,下面的符号都是合法的:行列索引名、字符串、and/not/or/&/|/~/not in/in/==/!=、四则运算符
重复元素处理
1. duplicated方法
**DataFrame.duplicated(self, subset: Union[Hashable, Sequence[Hashable], NoneType] = None, keep: Union[str, bool] = ‘
first’) → ‘Series’**返回表示重复行的布尔系列。
- keep{‘first’, ‘last’, False}, default ‘first’ Determines which duplicates (if any) to mark.
first : 首次出现设为不重复
last : 最后一次设为不重复
False : 则所有重复项为False
2. drop_duplicates方法
DataFrame.drop_duplicates(self, subset: Union[Hashable, Sequence[Hashable], NoneType] = None, keep: Union[str, bool]
= ‘first’, inplace: bool = False, ignore_index: bool = False) → Union[ForwardRef(‘DataFrame’), NoneType]
返回已删除重复行的DataFrame。
- ignore_index bool,默认为False 如果为True,则结果轴将标记为0、1,…,n-1。
抽样函数 sample方法
DataFrame.sample(self: ~FrameOrSeries, n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
→ ~FrameOrSeries
从对象轴返回随机的项目样本
n int,optional 从轴返回的项目数。不能与frac一起使用。如果frac = None,则默认= 1
frac float, optional 要返回的抽样比。不能与n一起使用
replace bool, default False 允许或不允许对同一行进行多次采样。frac大于1时, replace需为True.
weightsstr or ndarray-like, optional 样本权重,自动归一化