2017-06-01 77 views
1

我試圖根據一個鍵('r_id')合併多個文件,並用輸出文件的名稱重命名輸出中的列名。除了使用文件名重命名輸出外,我可以完成所有任務。我有以下錯誤可能是由舊版熊貓引起的。有沒有人知道如何解決這個問題,將更新的熊貓更新到新版本?如何解決AttributeError:'DataFrame'對象沒有屬性'分配'與更新熊貓?

錯誤

Traceback (most recent call last):          
     File "multijoin_2.py", line 19, in <module>        
     result = merge_files(files).reset_index()        
     File "multijoin_2.py", line 11, in merge_files       
     pd.read_csv(f, sep='\t', usecols=['r_id', 'exp'])   
     File "https://stackoverflow.com/users/xxx/anaconda/lib/python2.7/site-packages/pandas/core/frame.py", line 2007, in __getattr__ 
     (type(self).__name__, name))                    
AttributeError: 'DataFrame' object has no attribute 'assign' 

輸入

$貓test1的

r_id  g_id exp 
r1  g1  20 
r2  g1  30 
r3  g1  1 
r4  g1  3 

$貓test2的

r_id  gid exp 
r1  g2  20 
r2  g2  30 
r3  g2  1 
r4  g2  3 

$貓TEST3

r_id  g_id exp 
r1  g3  30 
r2  g3  40 
r3  g3  11 
r4  g3  32 

期望輸出繼電器

r_id test3 test2 test1 
0  r1  30  20  20 
1  r2  40  30  30 
2  r3  11   1   1 
3  r4  32   3   3 

工作代碼(除列命名)

import os 
import glob 
import pandas as pd 

files = glob.glob(r'/path/test*') 

def merge_files(files, **kwargs): 
    dfs = [] 
    for f in files: 
     dfs.append(
      pd.read_csv(f, sep='\t', usecols=['r_id', 'exp']) 
       #.assign(col=0) 
       .rename(columns={'col_name':os.path.splitext(os.path.basename(f))[0]}) 
       .set_index(['repeat_id']) 
     ) 
    return pd.concat(dfs, axis=1) 


result = merge_files(files).reset_index() 
print(result) 
+0

如果省略'#.assign (col = 0)'它不起作用? – jezrael

+0

它的作品,但它只是不重命名的列。 – user1703276

回答

1

您需要更改exp作爲列名重命名:

def merge_files(files, **kwargs): 
    dfs = [] 
    for f in files: 
     dfs.append(
      pd.read_csv(f, sep='\t', usecols=['r_id', 'exp'], index_col=['r_id']) 
       .rename(columns={'exp':os.path.splitext(os.path.basename(f))[0]}) 
     ) 
    return pd.concat(dfs, axis=1) 

result = merge_files(files).reset_index() 
print(result) 
    r_id test1 test2 test3 
0 r1  20  20  30 
1 r2  30  30  40 
2 r3  1  1  11 
3 r4  3  3  32 
+0

恐怕,您的代碼在問題中給出與我的腳本相同的輸出。它不是使用文件名重命名列名。 @jezrael – user1703276

+0

您是否將'col_name'更改爲'exp'? – jezrael

+0

狗屎!我錯過了。 :P謝謝! – user1703276

相關問題