前言
Selecting的部分真是用的最多的地方,所以也是最最熟悉的部分,这里不加赘述过于基础的东西,会快速的略过那些部分,但是会把一些不常用的东西、新奇的东西罗列出来。
基础:
df.loc, df.iloc, df.ix
df[int], df[int,int], df[:,:,int]
df[df.col > 0], df[() & ()], df[() | ()]
df[df.col.isin([1,2,3,4])]
不常用的:
df.loc[lambda x: x.col >0,:]
df.reindex()
# 可通过给一个新的(可大于现有长度)的index,生成NaN的行(那岂不是会乱序,碎碎念,要不就只能在最后加NaN)df.set_index(col)
# 可直接将某列/多列 设为indexdf.sample()
# 随机抽样,可用size也可用frac,还可赋予权重df[df['col'].map(lambda x: x.startswith('t')
# 用map来更灵活的生成布尔值df.where(df > 0)
# 等同于df[df >0]
,而且可用args对False的值进行替换df.mask(df > 0)
# 等同于df.where(df <= 0)
, 与上者是相反的布尔操作df.query('(a < b) & (b < c)')
# 类似于建立了一个df内部的SQL语言,abc都是列名,等价于df[(df.a < df.b) & (df.b < df.c)]
(实验性,不深入研究)df.lookup([1,2,3],['a','b','c'])
# 等价于df.loc[1,'a'], df.loc[2,'b'], df.loc[3,'c']
,传入两个等长的list,可以自动进行zip且索引。
关于df.where
用法较多,这里简单讲一讲
基本的用法:
df.where(df>0)
,但是同样可以是用df.where(df < 0 , -df)
,相当于把整个表格都转换成了负数。
或者df3.where(lambda x: x > 4, lambda x: x + 10)
对其进行操作,只对大于4的数字加10.
而且也会自动进行比对(alignment)。
例如df2[ df2[1:4] > 0 ] = 3
只会操作df2的1->4 行。