【问题标题】:Filter a column in excel Python在excel Python中过滤一列
【发布时间】:2017-06-08 17:34:52
【问题描述】:

我正在尝试通过过滤值来组织一列。换句话说,有成千上万个重复的名称,我想从每个“组”中只取一个名称并将其复制到另一列中。

所以A列是当前情况,be列是我想要得到的结果:

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')

不幸的是,它不起作用。

【问题讨论】:

  • 您只是想简单地对列进行重复数据删除?
  • 嗨,德米特里。正是我正在尝试在 Python 中对其进行重复数据删除。
  • Excel 已经具备此功能。见here
  • 感谢 KJ 的回答,但我需要在 python 中完成,因为这只是大脚本的一小部分。

标签: python excel filter


【解决方案1】:

我并没有真正使用 Python,但这是我相对较快找到的一种粗略方法。

import openpyxl

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

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')

编辑:显然openpyxl 的更新升级需要稍作修改

改变这个:

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

到这里:

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)

【讨论】:

  • 感谢您的帮助德米特里。我正在尝试完全按照您键入的方式使用您的脚本,但是它在 ws1.columns[1] 中弹出此错误 *****:TypeError: 'generator' object is not subscriptable [Finished in 5.3s with exit code 1]*****你知道为什么吗?
猜你喜欢
  • 2021-04-22
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多