在多个csv文件中插入和重命名列,然后合并到一个csv

时间:2018-09-05 10:06:46

标签: pandas

我有很多类似这样的csv:

csv output 1

我想重命名列名称,因为它们太长了,并要插入具有相同值(例如 aapl (Apple的代号))的名为 Company 的新列。这是我的代码:

data = pd.read_csv('aapl.csv', index_col=0)
data.insert(0, 'Company', 'aapl')
data.rename(columns={'Unnamed: 0': 'Company', 'Working Capital / Total Assets':'WC/TA', 'Retained Earnings / Total Assets': 'RE/TA', 'EBIT / Total Assets':'EB/TA','Current Market Cap / Total Liabilites':'MC/TL', 'Revenue / Total Assets':'RV/TA','Net Income / Total Assets (ROA)':'NI/TA', 'Total Liabilites / Total Assets':'TL/TA', 'Current Assets / Current Liabilites':'CA/CL'})
data.to_csv('aapl.csv')

我得到

enter image description here

问题是,我有278个其他公司的csv格式为(imb.csv,ase.csv,wire.csv等) ,我想为所有这些公司重命名/插入列以同样的方式。最后,我需要将所有这些csv文件合并到一个csv中(这就是为什么需要新列“ Company”的原因)。

我的问题是,如何创建新列(名称:Company)并用文件名填充它。

例如:装入 ibm .csv->重命名列->添加新列(公司)->插入值 ibm (公司名/代码)在公司列->导出到csv。

1 个答案:

答案 0 :(得分:2)

您可以阅读dict理解中的每个文件,按文件名添加密钥,并最后加上concat

import glob, os

files = glob.glob('files/*.csv')

d = {'Working Capital / Total Assets':'WC/TA', 
     'Retained Earnings / Total Assets': 'RE/TA', 
     'EBIT / Total Assets':'EB/TA',
     'Current Market Cap / Total Liabilites':'MC/TL',
     'Revenue / Total Assets':'RV/TA',
     'Net Income / Total Assets (ROA)':'NI/TA',
     'Total Liabilites / Total Assets':'TL/TA',
     'Current Assets / Current Liabilites':'CA/CL'}

dfs = {os.path.basename(fp).split('.')[0]: pd.read_csv(fp).rename(columns=d) for fp in files}
df = pd.concat(dfs).reset_index(level=1,  drop=True).rename_axis('company').reset_index()