Заменить значения столбца Excel на значения в другом файле - PullRequest
0 голосов
/ 01 мая 2018

У меня есть файл Excel с этими столбцами: v1, v2, commID

File 1

У меня есть другой файл со столбцами: Индекс, Имя

File 2

Теперь я хочу заменить v1 и v2 соответствующими именами, сославшись на второй файл, и запишите его в новый файл. Формат v1, v2, commID, но на этот раз v1 и v2 должны быть именами, тогда как commID должен быть одинаковые номера. Я могу сделать это в Excel или Python или Matlab.

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Я предлагаю вам два решения: одно для Excel и одно для Matlab. Выберите тот, который вы предпочитаете (если вам не нужно обрабатывать данные с помощью Matlab, я рекомендую вам выбрать первое решение и придерживаться Excel).

EXCEL

Придерживаясь Excel, чтобы решить эту проблему, я бы пошел на ручной подход. В этом случае единственной функцией, которую вам придется использовать, является VLOOKUP . Давайте посмотрим, как действовать шаг за шагом:

  1. Создать новый файл Excel.
  2. Откройте первый файл (файл со столбцами v1, v2 и commID) и скопируйте его содержимое на первый лист нового файла.
  3. Откройте второй файл (файл с Index и Name) и скопируйте его содержимое во второй лист нового файла.
  4. Вернуться к первому листу.
  5. Вставьте строку v1 в столбец D строку 1 (для репликации заголовка). Вставьте следующую формулу в столбец D строка 2: =VLOOKUP(A2;B!A:B;2;FALSE) и скопируйте ее вниз.
  6. Вставьте строку v2 в столбец E строку 1 (для репликации заголовка). Вставьте следующую формулу в столбец E строка 2: =VLOOKUP(B2;B!A:B;2;FALSE) и скопируйте ее вниз.
  7. Выберите целые столбцы D и E (переназначенные v1 и v2) и скопируйте их содержимое (CTRL+C). Теперь выберите целые столбцы A и B (старые v1 и v2) и вставьте ранее скопированное содержимое на место (используйте специальную функцию Paste Values из контекстного меню).
  8. Удалить последние два столбца листа. Удалить второй и третий листы. Сохраните ваш файл.

* MATLAB 1057 *

Поскольку ваша проблема очень близка к операции объединения SQL, я бы остановился на таблицах (полученных путем анализа файлов Excel с использованием функции readtable ) и встроенной функции 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 
0 голосов
/ 01 мая 2018

Очевидно, меняйте имена файлов и прочее по мере необходимости, но это сработало для меня! Это использует 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...