Python 熊猫过滤支持别名吗?
考虑以下情况中的过滤操作:Python 熊猫过滤支持别名吗?,python,pandas,Python,Pandas,考虑以下情况中的过滤操作: first\u repress\u wo\u comments=pandas.read\u csv(路径) 最近的=第一次答复和评论[ (第一次回复我的意见。在“2018-02-01”上发布) (第一次回复意见。发布于
first\u repress\u wo\u comments=pandas.read\u csv(路径)
最近的=第一次答复和评论[
(第一次回复我的意见。在“2018-02-01”上发布)
(第一次回复意见。发布于<'2018-03-13')
]
请注意,数据帧first\u repress\u wo\u comments
的名称指定了三次。如果有额外的过滤条件,那就更糟了。是否有任何方法可以以类似于SQL
中别名的方式为df-添加别名
更新我知道的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 = 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
x=first\u repress\u wo\u comments
然后只x.POST\u CREATED\u AT…
为什么不创建一个变量date\u field=first\u repress\u wo\u comments.POST\u CREATED\u AT
?更好的方法是使用pd.Series.between
,即date\u field.between(x,y,inclusive=False)
。您还可以使用df.query()
,它接受一个查询字符串,允许您访问不带数据帧名称的列。不过,这可能会对性能产生(好的或坏的)影响。但是,一般来说,您可以只指定另一个较短的名称。x=first\u replays\u wo\u comments
然后只x.POST\u CREATED\u AT…
为什么不创建一个变量date\u field=first\u replays\u wo\u comments.POST\u CREATED\u AT
?更好的方法是使用pd.Series.between
,即date\u field.between(x,y,inclusive=False)
。您还可以使用df.query()
,它接受一个查询字符串,允许您访问不带数据帧名称的列。不过,这可能会对性能产生(好的或坏的)影响。但是,一般来说,您可以只指定另一个较短的名称.Thx——也许我应该在不使用基于字符串的df.query的情况下进行指定(我知道这种方法)。你的回答无论如何都会对别人有帮助。我明白了。已经在我的答案中添加了另一个方法@javadbaI我真的在寻找别名之类的东西(不是额外的方法)-但是在任何情况下都会将你的答案投票为“可能对读者有帮助”@Efran FYI你可以在query
中组合字符串如下:df.query(<20180201
Thx-也许我应该在不使用基于字符串的df.query的情况下进行指定(我知道这种方法)。你的回答无论如何都会对别人有帮助。我明白了。已经在我的答案中添加了另一个方法@javadbaI我真的在寻找别名之类的东西(不是额外的方法)-但是在任何情况下都会将你的答案投票为“可能对读者有帮助”@Efran FYI你可以在query
中组合字符串如下:df.query(<20180201
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
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