3

几天前有人向我指出了 pandas.algos 中的一个函数(请参阅https://stackoverflow.com/a/17705498/2565842),我找不到任何关于此的文档。当我在http://pandas.pydata.org/pandas-docs/dev/上的 pandas 搜索框中键入“algos”或“is_monotonic_float64”(有问题的函数)时,我没有得到任何结果。同样,当我问谷歌时,我也没有得到任何有用的信息。

我寻找文档的原因是我在函数接受的类型方面遇到了问题。我写了两个这样的函数:

def is_monotonic(time_series, cols):
    return time_series.loc[:,cols].apply(lambda x: 
           pandas.algos.is_monotonic_float64(x)[0] if is_type(x, float) else "non_numeric data", 
           axis=1)

def is_type(series, t):
    return series.apply(lambda x: type(x) == t).all()

我在以下数据帧上运行它

           0          1          2          3          4
A          t          t          t          t          t
B  0.2583974  0.3311106   0.933452        NaN  0.1908287
C  0.4400121  0.9548238  0.2953693  0.7027355  0.6149148
D  0.4049013  0.5930965  0.7073495  0.3801416  0.4931772

但随后得到错误

ValueError: ("Buffer dtype mismatch, expected 'float64_t' but got Python object"

当我检查数据框中的类型时,第一行是字符串,其他类型为“float”。我需要在这里对 numpy.float64 进行某种类型的转换吗?

4

1 回答 1

0

不确定算法文档。如果某些内容没有记录,您可以随时在源代码中找到它。这个函数是为高性能而编写的 Cython,所以它是一个特别密集的例子。

但是ValueError,正如您所料,每列的数据类型必须足够通用以容纳其所有数据。通过执行覆盖它df.convert_objects(convert_numeric)。任何不是数字的内容(例如t)都将替换为NaN。所有的数字都应该变成float64类型,然后我会期待is_monotonic_float64工作。

或者,我看到还有一个pd.algos.is_monotonic_object,但我不确定它的行为方式,例如它t0.25823974.

于 2013-07-19T17:51:43.410 回答