2017-05-27 3 views
1

Ich versuche, mehrere CSV-Dateien in einem Ordner zusammenzuführen.kann doppelte Achse nicht erneut indizieren

Sie wie folgt aussehen (es gibt mehr als zwei df ist in Wirklichkeit):

df1

LCC acres 
2 10 
3 20 
4 40 
5 5 

df2

LCC acres_2 
2 4 
3 2 
4 40 
5 6 
6 7 

ich alle Datenrahmen in eine Liste setzen wollen, und füge sie dann mit reduzieren zusammen. Um dies zu tun, müssen sie den gleichen Index haben.

ich diesen Code versuchen:

combined = [] 
reindex = [2,3,4,5,6] 

folder = r'C:\path_to_files' 

for f in os.listdir(folder): 

    #read each file 
    df = pd.read_csv(os.path.join(folder,f)) 

    #check for duplicates - returns empty lists 
    print df[df.index.duplicated()] 

    #reindex 
    df.set_index([df.columns[0]], inplace=True) 
    df=df.reindex(reindex, fill_value=0) 

    #append 
    combined.append(df) 


#merge on 'LCC' column 
final = reduce(lambda left, right: pd.merge(left, right, on=['LCC'], how='outer'), combined) 

aber das gibt noch:

Traceback (most recent call last): 

    File "<ipython-input-31-45f925f6d48d>", line 9, in <module> 
    df=df.reindex(reindex, fill_value=0) 

    File "C:\Users\spotter\AppData\Local\Continuum\Anaconda2_2\lib\site-packages\pandas\core\frame.py", line 2741, in reindex 
    **kwargs) 

    File "C:\Users\spotter\AppData\Local\Continuum\Anaconda2_2\lib\site-packages\pandas\core\generic.py", line 2229, in reindex 
    fill_value, copy).__finalize__(self) 

    File "C:\Users\spotter\AppData\Local\Continuum\Anaconda2_2\lib\site-packages\pandas\core\frame.py", line 2687, in _reindex_axes 
    fill_value, limit, tolerance) 

    File "C:\Users\spotter\AppData\Local\Continuum\Anaconda2_2\lib\site-packages\pandas\core\frame.py", line 2698, in _reindex_index 
    allow_dups=False) 

File "C:\Users\spotter\AppData\Local\Continuum\Anaconda2_2\lib\site-packages\pandas\core\generic.py", line 2341, in _reindex_with_indexers 
    copy=copy) 

    File "C:\Users\spotter\AppData\Local\Continuum\Anaconda2_2\lib\site-packages\pandas\core\internals.py", line 3586, in reindex_indexer 
    self.axes[axis]._can_reindex(indexer) 

    File "C:\Users\spotter\AppData\Local\Continuum\Anaconda2_2\lib\site-packages\pandas\indexes\base.py", line 2293, in _can_reindex 
    raise ValueError("cannot reindex from a duplicate axis") 

ValueError: cannot reindex from a duplicate axis 

Antwort

2

Es gibt Problem, das Sie Duplikate Index überprüfen müssen nach dem ersten Spalte Index setzen.

#set index by first column 
df.set_index([df.columns[0]], inplace=True) 

#check for duplicates - returns NO empty lists 
print df[df.index.duplicated()] 

#reindex 
df=df.reindex(reindex, fill_value=0) 

Oder überprüfen Duplikate in der ersten Spalte stattdessen Index, auch Parameter keep=False return alle Duplikate (falls erforderlich):

#check duplicates in first column 
print df[df.iloc[:, 0].duplicated(keep=False)] 

#set index + reindex 
df.set_index([df.columns[0]], inplace=True) 
df=df.reindex(reindex, fill_value=0) 
Verwandte Themen