openpyxl Python 遍历大数据列表
openpyxl Python Iterating Through Large Data List
我有一个很大的 excel 工作簿,其中 1 个 sheet 大约有 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。在 A 列中,我想提取所有重复项并将它们与唯一值分开。
正如 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
在只读模式下工作时,不要使用列 属性 来阅读工作表。这是因为数据存储在行中,所以列需要解析器不断地重新读取文件。
This is an example 使用 openpyxl 将工作表转换为 Pandas 数据帧。它需要 openpyxl 2.4 或更高版本,在撰写本文时必须签出。
我有一个很大的 excel 工作簿,其中 1 个 sheet 大约有 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。在 A 列中,我想提取所有重复项并将它们与唯一值分开。
正如 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
在只读模式下工作时,不要使用列 属性 来阅读工作表。这是因为数据存储在行中,所以列需要解析器不断地重新读取文件。
This is an example 使用 openpyxl 将工作表转换为 Pandas 数据帧。它需要 openpyxl 2.4 或更高版本,在撰写本文时必须签出。