繁体   English   中英

openpyxl Python遍历大数据列表

[英]openpyxl Python Iterating Through Large Data List

我有一本大型Excel工作簿,其中包含1张纸,大约45,000行和45列。 我想遍历各列以查找重复项和唯一项,并且花费很长的时间遍历各个列。 无论如何,有没有优化我的代码或使之运行得更快? 我想打印信息或保存到txt文件。 我在Windows 10和python 2.7上使用openpyxl模块:

    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。 在AI列中,要提取所有重复项并将它们与唯一值分开。

正如VedangMehta提到的那样,Pandas将为您快速完成此任务。

运行此代码:

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_dupdf进行子设置来找到重复的值

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

对于唯一的线索,请使用~ ,这是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

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

这是使用openpyxl将工作表转换为Pandas数据帧的示例 它需要openpyxl 2.4或更高版本,在编写本文时必须将其检出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM