pandas中选取行列终极用法

pandas中如何取特定条件的行和/或特定条件的列一直很困扰,多次查文档,好象也没有一个很准确的总结。经过多天的尝试和学习,个人觉得现在是下一个统一结论的时候了。

通用方法

通用的方法就是用:
df.loc[]
例如:

df.loc[(Row_condition1) & (Row_condition2), : ] 
#这是通过一系列条件来选取行。
df.loc[:, (Col_condition1) & (Col_condition2)] 
#这是通过一系列条件来选取列。
df.loc[(Row_condition1) & (Row_condition2), (Col_condition1) & (Col_condition2)] 
#这是通过一系列条件来选取行和列。

简易方法

在选取行或列时,通常可以采取一些简易办法。如:

  • 选取行
    df[(Row_condition1) & (Row_condition2)] #这是直接用[]括号,不使用.loc[],通过一系列条件来选取行。

  • 选取列
    如果列名和关键字没有冲突,可以用点操作符选取一列。注意选取出来的格式是序列。
    df.列名 #只能选一列,并且列名没有冲突。
    可以用两组方括号选取一个或者多个任意名字的列,但这个方法不能用于条件选取:
    df[['col1', 'col2','col3']]
    需要注意,如果用一组方括号,可以取出一个序列(但不能取出多个序列)。而两组方括号取出的是永远是dataframe(不管是取一列还是多列)

df['col1']   #正确,取出一个序列。
df['col1','col2']  #报错,错误用法。
df[('col1','col2')]  #报错,错误用法。
df[['col1','col2']]  #正确,取出一个dataframe子集

pandas里subset的逻辑刚接触确实有点混乱。比如一组方括号设计为可以条件选取行,但不能直接用索引选出一行或者多行。可同时一组方括号又可以用来取出一列(序列),但不能取出多列。而两组方括号设计为可以选取一列或者多列,但又不能条件选取列。
当然逻辑乱的主要是在简易方法,如果怕糊涂,那就永远用.loc或者.iloc方法。这好象也是pandas推荐的做法。多敲几下键盘吧!

你可能感兴趣的:(pandas中选取行列终极用法)