考虑在 pandas 中进行过滤操作:
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')
]
请注意,数据帧first_replies_wo_comments
的名称已指定了3次。如果还有其他过滤条件,那就更多了。有什么办法可以使SQL
中的别名吗?
更新我知道/ dataframe.query()
。我想知道使用括号方法(在[]
内部)存在哪些选项。谢谢!
答案 0 :(得分:2)
您可以为此使用DataFrame.query
,并且可以链接每个新条件:
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