Pandas学习(二)

索引

单级索引

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
2
3
row = df.index.get_loc("XXX") 
#将此处的"XXX"换为想索引的元素
df[row:row+1]
  • 单列,多列索引

  • 函数式索引

  • 布尔索引

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
2
3
arrays = [['A','a'],['A','b'],['B','a'],['B','b']]
mul_index = pd.MultiIndex.from_tuples(arrays, names=('Upper', 'Lower'))
pd.DataFrame({'Score':['perfect','good','fair','bad']},index=mul_index)
  • 直接调用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。

  1. None(默认):不填补空白

  2. backfill/bfill:将上一个有效观察值向前传播到下一个有效值。

  3. pad/ffill:使用下一个有效观察值填充空白。

  4. 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.
  1. first : 首次出现设为不重复

  2. last : 最后一次设为不重复

  3. 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 样本权重,自动归一化

谢谢你请我吃糖果
0%