2017-01-24 5 views
0

値をフィルタリングしてカラムを整理しようとしています。言い換えれば、何千もの反復名があり、それぞれの「グループ」から1つの名前だけを取り出して、それを他の列にコピーしたいのです。エクセルPythonでカラムをフィルタリングする

だから、Aが現在の状況で、カラムがあること列は、私が取得したい結果である:

Column A     Column B 

AB Mark Sociedad Ltda  AB Mark Sociedad Ltda 
AB Mark Sociedad Ltda  Acosta Acosta Manuel 
AB Mark Sociedad Ltda  ALBAGLI, ZALIASNIK 
AB Mark Sociedad Ltda 
Acosta Acosta Manuel 
Acosta Acosta Manuel 
Acosta Acosta Manuel 
ALBAGLI, ZALIASNIK 
ALBAGLI, ZALIASNIK 
ALBAGLI, ZALIASNIK 

最後に、これは私が使用しようとしていますスクリプトです:

残念ながら
import openpyxl 
from openpyxl import load_workbook 
import os 

os.chdir('path') 
workbook = openpyxl.load_workbook('abc.xlsx') 
page_i = workbook.get_sheet_names() 
sheet = workbook.get_sheet_by_name('Sheet1') 

for a in range(1, 10): 
    representativex = sheet['A' + str(a)].value 
    tuple(sheet['A1':'A10']) 

    for row in sheet['A1':'A10']: 
     if representativex in row: 
      continue 
     else: 
      sheet['B' + str(a)].value 
      sheet['B' + str(a)] = representativex 

     workbook.save('abc.xlsx') 

それは動作しません。

+0

あなたは、単に列を重複排除しようとしていますか? –

+0

こんにちはドミトリー。正確には私はPythonでそれを削除しようとしています。 –

+0

Excelには既にこの機能があります。 [here](https://support.office.com/en-us/article/Filter-for-unique-values-or-remove-duplicate-values-ccf664b0-81d6-449b-bbe1-8daaec1e83c2)を参照してください –

答えて

1

私はPythonを実際に使っていませんが、ここでは私が比較的早く見つけたのは粗雑です。

import openpyxl 

wb = openpyxl.load_workbook('test.xlsx') 
ws1 = wb.active 

Sample Data

names = [] 
for row in ws1.columns[0]: 
    names.append(row.value) 

names = sorted(list(set(names))) 

start = 1 
for name in names: 
    ws1.cell(row = start, column=2).value = name 
    start += 1 

wb.save('test.xlsx') 

Sample Output Data

編集:どうやらopenpyxlの新しいアップグレードは、若干の修正を必要とする

変更この:

これに

for row in ws1.iter_cols(max_col = 1, min_row=1): 
    for cell in row: 
     names.append(cell.value) 

そして、念のためにあなたの列が異なっている、

iter_cols(min_col=None, max_col=None, min_row=None, max_row=None)[source] 

Returns all cells in the worksheet from the first row as columns. 

If no boundaries are passed in the cells will start at A1. 

If no cells are in the worksheet an empty tuple will be returned. 
Parameters: 

    min_col (int) – smallest column index (1-based index) 
    min_row (int) – smallest row index (1-based index) 
    max_col (int) – largest column index (1-based index) 
    max_row (int) – smallest row index (1-based index) 
+0

あなたのおかげでドミトリー。あなたの入力したスクリプトを正確に使用しようとしていますが、ws1.columns [1]の行にこのエラーが表示されます: TypeError: 'generator'オブジェクトは添字になりません [5.3sで終了exit code 1] *****あなたはその理由を知っていますか? –

+0

私の投稿の編集を確認してください –

+0

ありがとうドミトリー!それは完璧に働いています! –

関連する問題