通过大数据列表的openpyxl Python迭代
我有一个大型的45000行45列的Excel工作簿。 我想遍历列寻找重复和独特的项目,并花了很长的时间去通过单个列。 有无论如何优化我的代码或使这个更快? 我要么打印信息,要么保存到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行,5×10。 在列中,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]: ab 0 1 13 1 3 3 2 1 5 3 13 3
您可以在每列中find重复的值:
df_dup = df.groupby(axis=1, level=0).apply(lambda x: x.duplicated())
结果:
df_dup Out[26]: ab 0 False False 1 False False 2 True False 3 False True
您可以使用布尔数据df_dup
通过对df
进行子集化来查找重复的值
df[df_dup] Out[27]: ab 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]: ab 0 1.0 13.0 1 3.0 3.0 2 NaN 5.0 3 13.0 NaN
使用只读模式时,不要使用columns属性来读取工作表。 这是因为数据存储在行中,所以列需要parsing器不断地重新读取文件。
这是一个使用openpyxl将工作表转换为Pandas数据框的例子 。 它需要openpyxl 2.4或更高,在撰写本文时,必须检查出来。