python - Excel 到 Python 字典,用于使用 Openpyxl 进行过滤
问题描述
我正在尝试读取一个 excel 文件以将选定的列存储到 python 字典中。用于进一步的数据过滤和操作。我查阅了很多 Stackoverflow 现有问题以获取指示。但是,我能够弄清楚几件事。但是之前没有使用 Python 的经验给我带来了一些真正的挑战。我可以请你帮忙吗?以下是我能够使其在某种程度上发挥作用的代码。
from _collections import defaultdict
import openpyxl
SalesFunnel = defaultdict(list)
theFile = openpyxl.load_workbook('Report.xlsx')
allSheetNames = theFile.sheetnames
print("All sheet names {} " .format(theFile.sheetnames))
for sheet in allSheetNames:
print("Current sheet name is {}" .format(sheet))
currentSheet = theFile[sheet]
sfunnel = []
for row in range(1, currentSheet.max_row + 1):
for column in "ADEF":
cell_name = "{}{}".format(column, row)
SalesFunnel[row] = [cell_name, currentSheet[cell_name].value]
SalesFunnel[row].append(SalesFunnel[row])
print(SalesFunnel)
我的 excel 数据集包含重复的电子邮件和重复的潜在客户状态。每行包含一个创建日期。我需要找出潜在客户状态中每封电子邮件的日期的最大值和最小值。这样我就可以计算每个电子邮件地址之间的天数。但现在我无法以正确的格式读取数据。我还为唯一索引添加了一列,它只是唯一标识每一行的数字序列。
如果我以 json 格式得到类似的东西。那会很好。
{Index: 1, LeadStatus: Contacted, Email: joe@doe.com, CreatedDate: 7/9/2020}
{Index: 2, LeadStatus: Contacted, Email: joe@doe.com, CreatedDate: 8/10/2020}
{Index: 3, LeadStatus: Contacted, Email: joe@doe.com, CreatedDate: 9/11/2020}
{Index: 4, LeadStatus: Contacted, Email: ron@email.com, CreatedDate: 4/5/2020}
{Index: 5, LeadStatus: Contacted, Email: ron@email.com, CreatedDate: 7/6/2020}
还添加了我的 Excel 工作表的屏幕截图。您只能看到一封电子邮件,因为我有数千条记录。对于每封电子邮件,可能会有很多记录。潜在客户状态可能不是已联系。
解决方案
您可以使用 读取数据pandas
。我假设您的数据从单元格开始,A1
并且您正在阅读工作表中的所有内容。
data_df = pd.read_excel(sheet_path, sheet_name)
现在您可以计算每个组的日期max
和min
日期并找到您的差异
data_df['MaxDate'] = data_df.groupby(['LeadStatus','Email'])['CreatedDate'].transform('max')
data_df['MinDate'] = data_df.groupby(['LeadStatus','Email'])['CreatedDate'].transform('min')
data_df['Difference'] = pd.to_datetime(data_df['MaxDate']) - pd.to_datetime(data_df['MinDate'])
如果您不想重复记录,请使用agg
agg_df = data_df.groupby(['LeadId','LeadStatus','Email']).agg(MaxDate=('CreatedDate','max'),
MinDate = ('CreatedDate', 'min')).reset_index()
agg_df['Difference'] = pd.to_datetime(agg_df['MaxDate']) - pd.to_datetime(agg_df['MinDate'])
您现在可以根据json
需要转换为:
data_df.to_json(orient='records')
你也可以写到excel
with pd.ExcelWriter('..../new_doc.xlsx', engine='xlsxwriter') as writer:
data_df.to_excel(writer, sheet_name='New Data', index=False)
agg_df.to_excel(writer, sheet_name='Agg Data', index=False)
推荐阅读
- solr - SOLR 文本分析器,用于按相似度查找和排序文档
- c - 是否可以在不调用函数的情况下获取函数名称?
- python - 无需单击按钮即可调用函数
- python - 如何根据值分隔字符串
- python - IPython/django 按顺序执行历史
- unix - 将 split 命令的输出写入单独的目录(redux)
- android - 无法解析配置 CompileClasspath 的所有文件
- c# - 如何从 c# 中的 ViewModelHelper 关闭窗口(XAML)?
- kubernetes - 如何在 Kubernetes 容器中创建环境变量
- ios - 如何使用 Swift 为 iOS 应用程序将拟我表情贴纸添加到我的表情符号键盘