用其他fi中的值替换excel列值

2024-04-24 06:56:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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

File 1

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

File 2

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


Tags: 文件name名称index格式数字excelv2
2条回答

很明显,根据需要更改文件和资料的名称,但这对我很有效!这使用了openpyxl,我相信它包含在python的Anaconda发行版中。而且,这可能不是最好的方法,但它是有效的。在

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)

我向您推荐两种解决方案:一种用于Excel,另一种用于Matlab。选择一个你喜欢的(如果你不需要用Matlab处理数据,我建议你选择第一个解决方案,并坚持使用Excel)。在

EXCEL

坚持用Excel来解决这个问题,我会采用手工方式。在本例中,您必须使用的唯一函数是VLOOKUP。让我们看看如何逐步进行:

  1. 创建新的Excel文件。
  2. 打开第一个文件(具有v1v2commID列的文件)并将其内容复制粘贴到新文件的第一页中。
  3. 打开第二个文件(带有IndexName的文件)并将其内容复制粘贴到新文件的第二页中。
  4. 回到第一页。
  5. 在列D1中插入字符串v1(用于复制头)。在第D2中插入以下公式:=VLOOKUP(A2;B!A:B;2;FALSE)并将其复制到底部。
  6. 在列E1中插入字符串v2(用于复制头)。在第E2中插入以下公式:=VLOOKUP(B2;B!A:B;2;FALSE)并将其复制到底部。
  7. 选择整个DE列(重新映射的v1和{})并复制它们的内容(CTRL+C)。现在,选择整个AB列(旧的v1v2)并将先前复制的内容粘贴到位(使用上下文菜单中的Paste Values特殊功能)。
  8. 删除工作表的最后两列。删除第二页和第三页。保存文件。

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)的内容是:

^{pr2}$

第二个文件(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 

相关问题 更多 >