所以我的看法是,在对数据进行子设置以供分析时做两件事。
Pandas 有多种方法来完成这些操作,以及一些有助于获取行和列的技术。对于 Pandas 的新用户来说,这可能会让人感到困惑,因为选择太多了。
你会使用iloc、loc、括号、query、isin、np.where、mask等吗?
方法链
现在,方法链是数据处理时的一种很好的工作方式。在 R 中,他们有一个简单的方法,你 select() 列和你 filter() 行。
因此,如果我们想在 Pandas 中保持简单,为什么不使用 filter() 表示列,使用 query() 表示行。这两个都返回数据帧,因此不需要弄乱布尔索引,也不需要在返回值周围添加df[ ]。
那是什么样子的:-
df.filter(['col1', 'col2', 'col3']).query("col1 == 'sometext'")
然后您可以链接任何其他方法,例如 groupby、dropna()、sort_values()、reset_index() 等。
通过保持一致并使用filter() 获取您的列并使用query() 获取您的行,一段时间后返回代码时会更容易阅读代码。
但是过滤器可以选择行吗?
是的,这是真的,但默认情况下query() 获取行,filter() 获取列。因此,如果您坚持使用默认值,则无需使用axis= 参数。
查询()
query() 可以与and/or &/| 一起使用,您也可以使用比较运算符> , < , >= , <=, ==, !=。你也可以在里面使用 Python,而不是在里面。
您可以使用@my_list 将列表传递给查询
使用查询获取行的一些示例
df.query('A > B')
df.query('a not in b')
df.query("series == '2206'")
df.query("col1 == @mylist")
df.query('Salary_in_1000 >= 100 & Age < 60 & FT_Team.str.startswith("S").values')
过滤器()
所以过滤器基本上就像使用括号df[] 或df[[]] 一样,因为它使用标签来选择列。但它不仅仅是括号符号。
过滤器具有like= 参数,以便帮助选择具有部分名称的列。
df.filter(like='partial_name',)
过滤器也有正则表达式来帮助选择
df.filter(regex='reg_string')
所以总结一下这种工作方式可能不适用于任何情况,例如如果你想使用索引/切片,那么 iloc 是要走的路。但这似乎是一种可靠的工作方式,可以简化您的工作流程和代码。