熊猫产品dtype

时间:2016-02-22 16:47:01

标签: python pandas

假设我有一个包含两列布尔值的pandas数据框。我想沿着列采取产品,所以:

df.product(axis=1)

这将返回产品,但数据类型始终为int64。看看熊猫来源,看起来像_make_stat_function(产品似乎正在调用的产品)可以使用dtype kwarg。

  1. 是这样的吗?
  2. 这项工作需要什么?我已经尝试将dtype指定为字符串,python类型和numpy数据类型。一切都没有喜悦。
  3. 链接

    Pandas docos:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.product.html

    来源:

    产品从此处发货:https://github.com/pydata/pandas/blob/master/pandas/core/generic.py#L5062

    到这里:https://github.com/pydata/pandas/blob/master/pandas/core/generic.py#L5246

2 个答案:

答案 0 :(得分:2)

https://github.com/pydata/pandas/commit/3d2f11594ab546874aad07ccf08b4193ad4a12db

这个_validate_kwargs功能是新的,非常新的(8天)。它位于主存储库中,但它可能不在任何人的发行版中。

  

BUG:防止在统计函数中滥用kwargs   通过过滤stat中的kwargs参数来解决问题#12301   在...时阻止明显无效的参数通过的功能   同时保持与类似numpy的兼容性   功能

所以它被添加,以防止人们使用明显虚假,非像kwargs这样的非笨拙。但我不明白为什么他们不能只使用:

_validate_kwargs(name, kwargs)

阻止所有kwargs,因为它们未在此函数中使用(或generic.py中的任何其他函数)。

================================

您链接的_make_stat_function有一个:

_validate_kwargs(name, kwargs, 'out', 'dtype')

语句。但我没有在返回的函数中看到kwargs的任何进一步使用。我不熟悉pandas代码,但看起来validate调用以某种方式测试这些prod的{​​{1}}函数。

我稍早的kwargs版本没有此pandas声明。它接受validate参数,但对它没有任何作用。它也接受一个dtype kwarg参数,具有相同的非效果。

我建议深入研究test个问题并提取请求,以了解添加此pandas来电的时间和原因。在这种情况下,它似乎没有做任何重要的事情。

validate位于同一个_validate_kwargs文件中。这里所做的只是检查generic.py除了'out'和kwargs之外不包含任何内容。 'name'仅用于错误消息中。因此,如果您为其他dtype提供其他product,则此测试kwargs会引发错误,但如果您给它dtypeout,则可以。但这并不能保证它会使用它们。

答案 1 :(得分:-1)

至于您的具体问题,将布尔值的乘积转换为int s与检查所有布尔值是否为True相同。

只需:df.all(axis=1)

在更具体的产品案例中,documentation不包含任何dtype操作。

但是,如果您绝对关心dtype保护,您可以执行以下操作(前提是您的数据已明确定义,即浮点数/整数等),这会将生成的dtype从product转换为您的初始dtype。

>>> import pandas as pd
>>> df = pd.DataFrame({'a': [0.1, 0.2, 0.6], 'b': [2, 3, 4]})
>>> df.dtypes
a    float64
b      int64
dtype: object
>>> prod = df.product()
>>> prod
a     0.012
b    24.000
dtype: float64

>>> prod.astype(df.dtypes)
a    0.012
b       24
dtype: object