2014-10-06 68 views
1

我在Python中有此代碼,它附加了位於同一文件中的多個CSV。它工作正常。在所有行中添加多個帶有每個CSV名稱名稱的CSV - Python

import os 
import pandas as pd 

targetdir = r'E:/Base 2015-1/Carreras' 

filelist = os.listdir(targetdir) 

big_df=pd.DataFrame() 

for filename in filelist: 
    big_df = big_df.append(pd.read_csv(os.path.join(targetdir, filename), header= None),ignore_index=True) 

但是,我想在輸出中創建一個列,每行的名稱來自追加之前的CSV。例如:

CSV File: A1 
1 2 3 
a b 3 

CSV File: A2 
2 4 1 
a e r 

Append: 
1 2 3 A1 
a b 3 A1 
2 4 1 A2 
a e r A2 

那麼,如何更改我的代碼以獲取該代碼?

回答

2

我測試,以下做了你指定什麼:

# from for loop onward... 
for filename in filelist: 
    tmpdf = pd.read_csv(os.path.join(targetdir, filename),sep=' ',header=None) 
    tmpdf[len(tmpdf.columns)] = filename # add column with filename 
    bigdf = pd.concat([bigdf,tmpdf],ignore_index=True) 
1

您可以使用轉換器參數來即時更改或格式化數值。我不知道是否會追加一列,如果一個不存在的,但你可以試試這個:

def file_converter(file_number): 
    # This can be made more complicated if you want A..Z 
    return 'A{0}'.format(file_number) 

for file_number, filename in enumerate(filelist): 
    file_path = os.path.join(targetdir, filename) 
    # Modify the 4th column contents 
    big_df = big_df.append(pd.read_csv(file_path, converters={3:file_converter(file_number)})) 
相關問題