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推荐的做法。多敲几下键盘吧!
网友评论