Python:寻找一种基于特征条件统计记录的快速方法

问题描述 投票:0回答:2

我的处女作!

设置 我有一个项目,我在 Excel 文件中获得了一堆记录,我的任务是对其进行“Excel 体操”,以便根据一系列标准获得某些记录的数量。

这个 Excel 体操是在不同的列上进行一系列的鼠标点击,我为所有的列选择不同的值以减少记录的数量,然后计算剩余的记录并将该数字放入不同的电子表格中。

例如:假设我有一份动物园里的动物清单。每条记录代表一种不同的动物,列代表用于描述动物的所有特征。

假设我的任务是寻找动物园中的所有蛇:我会将“带血”过滤器设置为“冷”,将“手臂/腿”过滤器设置为“无”,将“呼吸机制”过滤器设置为“肺。生成的记录列表将是动物园中的所有蛇。我会计算记录的数量,在带有标签“蛇”的单元格中的不同电子表格中记录该数字,然后移动到下一个要计数的动物。

问题 为了实现这个目标,我应该在 Python 中阅读什么东西?

理想情况下,我想要两个文件:

  1. 我要统计的 记录(11 列特征,所有字符串,每个特征有 3-4 个可能的值;100,000 条记录)
  2. a 用于统计记录的条件列表;这基本上是所有功能的所有可能结果的堆栈

输出报告将是一个计数列表,每个计数代表编号条件列表中的一个项目。 谢谢,

尼克

我研究了布尔/二进制索引,但给出的示例似乎指向数字数组或如何构建具有真/假索引的数据帧。

python filtering record counting
2个回答
0
投票

您是在问如何以编程方式从 Excel 文件中获取特征本身,还是您已经拥有所有动物及其给定特征并且正在寻找如何存储和引用它们?

如果你正在寻找后者,你可以制作一个包含每种动物及其特征的嵌套字典。例如:

animals = {"snake" : {"blooded":"cold", "breathing-mechanism":"lungs"},...}

然后当您必须与 Excel 交互时(我还假设您必须使用 Python 与 Excel 中的文字过滤器函数交互,而不仅仅是提取过滤后的数据),您只需将每个过滤器设置为

animals[animal][filter]

如果您还需要以编程方式获取过滤器值(即,您被告知要找到所有蛇,但不允许先查看文件),我建议您查看如何将 excel 数据导入 pandas 数据框,以及如何从熊猫数据框中获取唯一值的索引。

一旦您在“动物”列中获得了唯一值的索引,您就可以引用每个唯一索引的行并将该行中每一列的数据添加到如上所示的字典中,然后继续您的 Excel 体操.


0
投票

您可以在 Python 中使用 pandas 库。 Pandas 是一个流行的数据处理和分析库。它可以读取 Excel 文件并有效地处理大型数据集。

以下是您可以遵循的步骤:

  1. 使用 pandas 读取 Excel 文件
  2. 通过选择与特定列中的特定值匹配的行,根据您的条件过滤数据。您可以使用 pandas 中的布尔索引来执行此操作。
  3. 使用 len() 函数计算剩余记录的数量。
  4. 将计数写入不同的电子表格。

这里是示例代码:

import pandas as pd

# Read in the Excel file
df = pd.read_excel('path/to/excel/file.xlsx')

# Filter the data based on your criteria
condition = (df['blooded'] == 'cold') & (df['arms/legs'] == 'none') & (df['breathing-mechanism'] == 'lungs')
filtered_data = df[condition]

# Count the number of remaining records
count = len(filtered_data)

# Write the count to a different spreadsheet
# You can use the pandas ExcelWriter to write the count to an Excel file
with pd.ExcelWriter('path/to/output/file.xlsx') as writer:
    # Create a new DataFrame with the count
    count_df = pd.DataFrame({'count': [count]})
    # Write the DataFrame to the Excel file
    count_df.to_excel(writer, sheet_name='Sheet1', index=False)
© www.soinside.com 2019 - 2024. All rights reserved.