nehmen die folgende sehr einfaches Beispiel:Pandas fusionieren auf DatetimeIndex Typeerror: Objekt des Typs ‚NoneType‘ hat keine 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)
gibt den Fehler, Typeerror: Objekt des Typs ‚NoneType‘ hat keine len (). Fehle ich, wie Merge funktionieren soll, wenn ich diese zwei Datenrahmen auf dem Index zusammenführen möchte, der derselbe DatetimeIndex ist?
ich Python bin mit 2.7.12, Pandas 0.18.1 und 1.11.1 Numpy
Der vollständige Rückverfolgung ist:
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()
führen würde, unter diesen Umständen ist es besser, mit 'join' zu bleiben, wie es schön auf Joins überlappende Indizes - 'df1.join (df2, lsuffix = '_ l', rsuffix = '_ r')' –
Vielen Dank! Ich muss die Dokumentation für die Zusammenführung komplett falsch gelesen haben. –
'join' scheint auch damit marginal schneller zu sein als '% time it df1.join (df2, lsuffix =' _ l ', rsuffix =' _ r ')' 1000 Schleifen, best of 3: 468 μs pro Schleife und '% timeit pd.merge (df1, df2, left_index = True, right_index = True) 'liefert 1000 Schleifen, das beste von 3: 485 μs pro Schleife –