[英]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_dup
对df
进行子设置来找到重复的值
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.