2016-11-11 81 views
0

採取以下非常簡單的例子:熊貓合併上DatetimeIndex類型錯誤:類型的對象「NoneType」沒有LEN()

import pandas as pd 
import numpy as np 
import datetime 

base = datetime.datetime(2016, 10, 1) 
date_list = [base - datetime.timedelta(days=x) for x in range(0, 100)] 

df1 = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'), index = date_list) 
df2 = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'), index = date_list) 

pd.merge(df1, df2, how = 'outer', left_on = True) 

返回錯誤,類型錯誤:類型的對象「NoneType」沒有LEN( )。我是否缺少合併應該如何工作,如果我想合併索引上的這兩個DataFrame,這是相同的DatetimeIndex?

我運行的Python 2.7.12,熊貓0.18.1和1.11.1 numpy的

完整回溯是:

TypeError         Traceback (most recent call last) 
<ipython-input-1-3174c0ff542d> in <module>() 
     9 df2 = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'), index = date_list) 
    10 
---> 11 pd.merge(df1, df2, how = 'outer', left_on = True) 

/Users/user/anaconda/lib/python2.7/site-packages/pandas/tools/merge.pyc in merge(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator) 
    36       right_on=right_on, left_index=left_index, 
    37       right_index=right_index, sort=sort, suffixes=suffixes, 
---> 38       copy=copy, indicator=indicator) 
    39  return op.get_result() 
    40 if __debug__: 

/Users/user/anaconda/lib/python2.7/site-packages/pandas/tools/merge.pyc in __init__(self, left, right, how, on, left_on, right_on, axis, left_index, right_index, sort, suffixes, copy, indicator) 
    208   (self.left_join_keys, 
    209   self.right_join_keys, 
--> 210   self.join_names) = self._get_merge_keys() 
    211 
    212  def get_result(self): 

/Users/user/anaconda/lib/python2.7/site-packages/pandas/tools/merge.pyc in _get_merge_keys(self) 
    405   left_keys, right_keys 
    406   """ 
--> 407   self._validate_specification() 
    408 
    409   left_keys = [] 

/Users/user/anaconda/lib/python2.7/site-packages/pandas/tools/merge.pyc in _validate_specification(self) 
    521          'of levels in the index of "left"') 
    522     self.left_on = [None] * n 
--> 523   if len(self.right_on) != len(self.left_on): 
    524    raise ValueError("len(right_on) must equal len(left_on)") 
    525 

TypeError: object of type 'NoneType' has no len() 

回答

1

documentation它指出: 「left_on」 即可「標籤或列表或類似數組」當你傳遞「真」時出現錯誤。 如果你只是省略「left_on」,它似乎工作正常。

我誤解了這個問題嗎?

Mabye你是真的想做到這一點:

pd.merge(df1, df2, how = 'outer', left_index = True, right_index=True) 

這將導致

A_x B_x C_x D_x A_y B_y C_y D_y 
2016-10-01 99 9 89 27 2 10 63 44 
2016-09-30 42 74 58 87 33 56 83 72 
2016-09-29 89 41 89 94 75 66 74 17 
2016-09-28 53 42 4 83 84 48 2 36 
2016-09-27 81 97 1 14 86 27 49 53 
+1

此外,在這種情況下,最好是用'join'堅持,因爲它很好地連接上重疊的索引 - 'df1.join(df2,lsuffix ='_ l',rsuffix ='_ r')' –

+0

謝謝!我必須完全錯誤地閱讀合併文檔。 –

+1

'join'似乎也比合並速度稍微快一點'''''''''timeit df1.join(df2,lsuffix ='_ l',rsuffix ='_ r')'1000循環,最好是每循環3:468μs,'% timeit pd.merge(df1,df2,left_index = True,right_index = True)'返回1000個循環,每個循環最好爲3:485μs –

相關問題