Pandas过滤是否支持别名?

2024-03-28 14:08:47 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑中的过滤操作:

   first_replies_wo_comments = pandas.read_csv(path)

   recent = first_replies_wo_comments[
    (first_replies_wo_comments.POST_CREATED_AT > '2018-02-01') & 
    (first_replies_wo_comments.POST_CREATED_AT < '2018-03-13')
   ]

注意,dataframefirst_replies_wo_comments的名称被指定了三次。如果有额外的过滤条件,那就更糟了。有没有什么方法可以用类似于SQL中别名的方式来别名df-?你知道吗

更新我知道dataframe.query()。我想知道当使用带圆括号的方法(在[]中)时存在哪些选项。谢谢!你知道吗


Tags: csvpath方法名称pandasreadpostcomments
1条回答
网友
1楼 · 发布于 2024-03-28 14:08:47

您可以使用^{}来实现这一点,并且可以链接每个新条件:

df = pd.DataFrame({'POST_CREATED_AT': pd.date_range('20180128', periods=7)})
print(df)

  POST_CREATED_AT
0      2018-01-28
1      2018-01-29
2      2018-01-30
3      2018-01-31
4      2018-02-01
5      2018-02-02
6      2018-02-03

df_filter = df.query('POST_CREATED_AT > 20180201').query('POST_CREATED_AT < 20180313')
print(df_filter)

  POST_CREATED_AT
5      2018-02-02
6      2018-02-03

另一种方法是mask您的条件,它更接近SQL别名:

df = pd.DataFrame({'POST_CREATED_AT': pd.date_range('20180128', periods=7),
                   'ID':['A', 'B', 'C', 'D', 'E', 'F', 'G']})
print(df)
  POST_CREATED_AT ID
0      2018-01-28  A
1      2018-01-29  B
2      2018-01-30  C
3      2018-01-31  D
4      2018-02-01  E
5      2018-02-02  F
6      2018-02-03  G

m1 = df['POST_CREATED_AT'].between('20180201', '20180313', inclusive=False)
m2 = df['ID'] == 'G'

print(df[m1 & m2])

  POST_CREATED_AT ID
6      2018-02-03  G

相关问题 更多 >