有什么方法可以在pandas数据帧查询中转换类型吗?

时间:2017-03-08 21:44:41

标签: python pandas dataframe types casting

假设我有一个包含3列的数据框,全部都是浮点类型,将其命名为DT1。 现在,如果我想通过查询DT1从DT1创建另一个数据帧,那么第二个称为DT2。

DT2 = DT1.query(‘(column1/column2) == (column3/column2)’)

只有当等式的两边完全匹配时,这才有效。 如果我只想比较两边的整数结果怎么办?

像:

DT2 = DT1.query(‘(column1/column2).astype(int) == (column3/column2)’).astype(int)

上面的例子无法解决问题?

PS:

DT2 = DT1.loc(‘(DT1[column1]/DT1[column2]).astype(int) == (DT1[column3[/DT1[column2]).astype(int)’)

会奏效。我很好奇它是否可以通过查询工作。

谢谢!

1 个答案:

答案 0 :(得分:4)

假设您有以下DF:

In [125]: df
Out[125]:
   col1  col2   col3
0  2.11   1.1  2.101
1  1.00   1.0  3.000
2  4.40   2.2  4.900

您可以使用DataFrame.query(..., engine='python')

In [132]: df.query("col1 // col2 == col3 // col2", engine='python')
Out[132]:
   col1  col2   col3
0  2.11   1.1  2.101
2  4.40   2.2  4.900

DataFrame.eval(..., engine='python')

In [126]: df[df.eval("col1 // col2 == col3 // col2", engine='python')]
Out[126]:
   col1  col2   col3
0  2.11   1.1  2.101
2  4.40   2.2  4.900

检查:

In [131]: ((df.col1 / df.col2).astype(int) == (df.col3 / df.col2).astype(int))
Out[131]:
0     True
1    False
2     True
dtype: bool