openpyxl Python迭代大数据列表

时间:2016-06-02 14:27:30

标签: python excel duplicates openpyxl

我有一张大型Excel工作簿,其中包含大约45,000行和45列的1张工作表。我想遍历列,寻找重复项和独特的项目,并花了很长时间来浏览各个列。反正是为了优化我的代码还是让它更快?我想要打印信息或保存到txt文件。我使用openpyxl模块在Windows 10和python 2.7上:

    from openpyxl import load_workbook, worksheet, Workbook
    import os

    #read work book to get data
    wb = load_workbook(filename = 'file.xlsx', use_iterators = True)
    ws = wb.get_sheet_by_name(name = 'file') 
    wb = load_workbook(filename='file.xlsx', read_only=True)

    count = 0
    seen = set()
    uniq = []

    for cell in ws.columns[0]:
       if cell not in seen:
         uniq.append(cell)
         seen.add(cell)

    print("Unique: "+uniq)
    print("Doubles: "+seen)

编辑:假设我有5列A,B,C,D,E和10个条目,所以10行,5x10。在A列中,我想提取所有重复项并将它们与唯一值分开。

2 个答案:

答案 0 :(得分:0)

正如VedangMehta所说,熊猫会很快为你做到。

运行此代码:

import pandas as pd
#read in the dataset:
df = pd.read_excel('file.xlsx', sheetname = 'file')

df_dup = df.groupby(axis=1, level=0).apply(lambda x: x.duplicated())

#save duplicated values from first column
df[df_dup].iloc[:,0].to_csv("file_duplicates_col1.csv")

#save unique values from first column
df[~df_dup].iloc[:,0].to_csv("file_unique_col1.csv")

#save duplicated values from all columns:
df[df_dup].to_csv("file_duplicates.csv")

#save unique values from all columns:
df[df_dup].to_csv("file_unique.csv")

详情请见下文:

假设您的数据集如下所示:

df = pd.DataFrame({'a':[1,3,1,13], 'b':[13,3,5,3]})
df.head()
Out[24]:
    a   b
0   1  13
1   3   3
2   1   5
3  13   3

您可以在每列中找到重复的值:

df_dup = df.groupby(axis=1, level=0).apply(lambda x: x.duplicated())

结果:

df_dup

Out[26]:
       a      b
0  False  False
1  False  False
2   True  False
3  False   True

您可以使用布尔数据框df

通过对df_dup进行子集来找到重复的值
df[df_dup]
Out[27]:
     a    b
0  NaN  NaN
1  NaN  NaN
2  1.0  NaN
3  NaN  3.0

同样,你可以使用以下方法保存:

 #save the above using:
 df[df_dup].to_csv("duplicated_values.csv")

要查看第一列中的重复值,请使用:

df[df_dup].iloc[:,0]

获取

Out[11]:
0    NaN
1    NaN
2    1.0
3    NaN
Name: a, dtype: float64

对于唯一的calues,请使用Python不签名的~。因此,您基本上通过非重复值

df进行子集化
df[~df_dup]

Out[29]:
      a     b
0   1.0  13.0
1   3.0   3.0
2   NaN   5.0
3  13.0   NaN

答案 1 :(得分:0)

使用只读模式时,请勿使用columns属性来读取工作表。这是因为数据存储在行中,因此列需要解析器不断重新读取文件。

This is an example使用openpyxl将工作表转换为Pandas数据帧。它需要openpyxl 2.4或更高版本,在编写本文时必须检查它。