2013-07-19 46 views
3

幾天前有人指給我一個pandas.algos函數(見https://stackoverflow.com/a/17705498/2565842),我找不到任何文檔。當我在http://pandas.pydata.org/pandas-docs/dev/的熊貓搜索框中鍵入「algos」或「is_monotonic_float64」(有問題的函數)時,我沒有得到任何結果。同樣,當我問Google時,我也沒有得到任何有用的信息。熊貓算法包:在哪裏可以找到文檔或更多關於「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嗎?

+1

這些不是公共函數並且被使用(目前僅用於索引);也就是說這些數據可以用於(比如你指出的例子)數據,只是沒有實現;爲什麼你不打開一個問題來請求列上的''is_monotonic''(很容易做到),你想做什麼? – Jeff

+0

你可以通過一列(或多列)排序,然後在索引 – Jeff

+0

上調用''is_monotonic''來感謝@Jeff。這可能是一個愚蠢的問題,但我將如何/在哪裏/誰發出請求? – Anne

回答

0

不確定算法文檔。如果某件事沒有記錄,您可以隨時登錄find it in the source code。這個函數寫的是Cython的高性能,所以它是一個特別密集的例子。

但正如你所期望的那樣,關於那個ValueError,每列的數據類型必須足夠普遍以容納其所有數據。通過執行df.convert_objects(convert_numeric)來覆蓋該值。任何非數字(例如,t)將被替換爲NaN。所有數字應該變成float64類型,然後我會期望is_monotonic_float64工作。

另外,我看到也有一個pd.algos.is_monotonic_object,但我不知道它是如何表現的,例如,它如何比較t0.25823974

相關問題