将excel列值替换为另一个文件中的值

时间:2018-05-01 17:15:18

标签: python excel matlab

我有一个包含以下列的excel文件:v1,v2,commID

File 1

我有另一个包含列的文件:Index,Name

File 2

现在我想通过引用第二个文件将v1和v2替换为相应的名称并将其写入新文件。格式为v1,v2,commID,但这次v1和v2应该是名称,而commID应该是相同的数字。我可以在excel,python或matlab中完成。

2 个答案:

答案 0 :(得分:0)

显然,根据需要更改文件和内容的名称,但这对我有用!这使用openpyxl,我相信它包含在Anaconda的python发行版中。此外,这可能不是最好的方法,但它确实有效。

import openpyxl

wb1 = openpyxl.load_workbook(filename="wb1.xlsx")
wb2 = openpyxl.load_workbook(filename="wb2.xlsx")
output_file = openpyxl.Workbook()

dest_filename = "outputWorkbook.xlsx"

commIDlist, nameList = [], []
for item in wb1['Sheet1']['C']:
    commIDlist.append(item.value)

for item in wb2['Sheet1']['B']:
    nameList.append(item.value)

ws1 = output_file.active
ws1.title = "Data Ouput"

i = 0
j = 0
for row in range(1, len(nameList)):
    _ = ws1.cell(column=1, row=row, value=nameList[i])
    j += 0

for row in range(1, len(commIDlist)):
    _ = ws1.cell(column=2, row=row, value=commIDlist[i])
    i += 1

output_file.save(filename=dest_filename)

答案 1 :(得分:0)

我建议你两个解决方案:一个用于Excel,一个用于Matlab。选择你喜欢的那个(如果你不需要用Matlab处理数据,我建议你去寻找第一个解决方案并坚持使用Excel。)

<强> EXCEL

坚持使用Excel来解决这个问题,我会采用手动方法。在这种情况下,您必须使用的唯一功能是VLOOKUP。让我们看看如何一步一步地进行:

  1. 创建一个新的Excel文件。
  2. 打开第一个文件(包含v1v2commID列的文件)并将其内容复制粘贴到新文件的第一张文件中。
  3. 打开第二个文件(包含IndexName的文件)并将其内容复制粘贴到新文件的第二张文件中。
  4. 返回第一张。
  5. v1D中插入字符串1(用于复制标题)。在列D2=VLOOKUP(A2;B!A:B;2;FALSE)中插入以下公式,然后将其复制到底部。
  6. v2E中插入字符串1(用于复制标题)。在列E2=VLOOKUP(B2;B!A:B;2;FALSE)中插入以下公式,然后将其复制到底部。
  7. 选择整个DE列(重新映射的v1v2)并复制其内容(CTRL+C)。现在,选择整个AB列(旧v1v2)并粘贴之前复制的内容(使用Paste Values特殊功能从上下文菜单)。
  8. 删除工作表的最后两列。删除第二张和第三张。保存文件。
  9. <强> MATLAB

    由于您的问题非常接近SQL联接操作,我会选择表(通过使用readtable函数解析Excel文件获得)和内置join功能:

    % Read the content of both Excel files...
    F1 = readtable('File1.xlsx');
    F2 = readtable('File2.xlsx');
    
    % Join the table F1 with F2 on v1 = Index...
    T1 = join(F1,F2,'LeftKeys',{'v1'},'RightKeys',{'Index'});
    
    % Join the table F1 with F2 on v2 = Index...
    T2 = join(F1,F2,'LeftKeys',{'v2'},'RightKeys',{'Index'});
    
    % Create the final table combining T1.Name (as v1), T2 (as v2) and F1.commID (as commID)...
    T = table(T1.Name,T2.Name,F1.commID,'VariableNames',{'v1' 'v2' 'commID'});
    
    % Save the result into a new file...
    writetable(T,'File3.xlsx');
    

    假设第一个文件(File1.xlsx)的内容是:

    v1    v2    commID
    __    __    ______
    
    2     1     1     
    2     1     1     
    3     4     1     
    3     5     2     
    1     4     1 
    

    ,第二个文件(File2.xlsx)的内容为:

    Index    Name 
    _____    _____
    
    1        'AAA'
    2        'BBB'
    3        'CCC'
    4        'DDD'
    5        'EEE'
    

    然后最终输出将是:

     v1       v2      commID
    _____    _____    ______
    
    'BBB'    'AAA'    1     
    'BBB'    'AAA'    1     
    'CCC'    'DDD'    1     
    'CCC'    'EEE'    2     
    'AAA'    'DDD'    1