我使用了merge函数来创建两个查询之间的数据框,现在我想要在数据框中对一个列应用筛选器,但是我无法使其生效。我试图添加筛选条件:日期为空或空白。
##reading data from sql
package = pd.read_sql(sql,con)
component = pd.read_sql(sqla,con)
##doing the left join
test2 = pd.merge(package,component, on = ['identifier','date'], how='left')
##shrinking the dataframe
test3 = test2[['identifier_x']].copy()
我尝试过以下操作,但无法使其工作。出现“date_y未定义”的错误。我也尝试了只使用date
,因为当我合并我的数据框时,相似的列会被标记为x
和y
。
test2 = pd.merge(package,component, on = ['identifier','date'], how='left'), component.query(date_y == '')
现在正在尝试:
test2 = pd.merge(package,component, on = ['identifier','date'], how='left')
test2.query('date_y == \'\'')
并且
test2 = pd.merge(package,component, on = ['identifier','date'], how='left')
test2[test2.date_y == '']
也尝试过:
test2 = pd.merge(package,component, on = ['identifier','date'], how='left')
test2 = test2.date_y == ''
样例数据:
+------------+------------+------------+------------+
| date_x | identifier | date_y | identifier |
+------------+------------+------------+------------+
| 13/03/2019 | 3582191409 | 13/03/2019 | 3582191410 |
| 13/03/2019 | 3582191289 | 13/03/2019 | 3582191290 |
| 13/03/2019 | 3582190137 | 13/03/2019 | 3582190138 |
| 13/03/2019 | 3582185931 | 13/03/2019 | 3582185930 |
| 13/03/2019 | 3582184503 | | 3582184502 |
| 13/03/2019 | 3582195631 | | 3582195632 |
| 13/03/2019 | 3582191374 | | 3582191373 |
| 13/03/2019 | 3582185917 | | 3582185916 |
| 13/03/2019 | 3582185863 | | 3582185862 |
+------------+------------+------------+------------+
我正在尝试过滤日期,其中 y = 空白。
test2
中。它目前设置为创建一个元组,其中包括两个项目:第一个是您合并的 DataFrame,第二个是从 SQL 读取时定义的component
的过滤版本。如果您想使用pd.query
过滤合并的 DataFrame,则需要在新行上使用以下内容:test2.query('date_y == \'\'')
。请注意,使用pd.query
时,整个查询都需要在反引号中。同样,您可以使用:test2[test2.date_y == '']
。 - Berenger