python查找元素新方法
对于编程的入门选手来说,查找一个数据表中元素出现的个数,脑海中立刻闪现:两个for循环——秒了。但是,对于python来说,我在它的初始库里面找到了另外一种办法,能够让我们优雅地解决这个问题。话不多说,让我们进入正题。
1.导入必要的库
import pandas as pd import numpy as np from collections import counter import string
我们主要依靠counter实现对元素的统计,而这个库属于python的标准库,无需额外安装。
2.生成随机样本数据
查找元素当然需要先构造数据集,为了大家编写方便,我这里直接随机生成(这种方法和实际开发遇到需求时快速验证的原理相同,重点是快速高效,不为数据而烦恼)
定义函数:generate_data:
def generate_data(rows,columns):
```
按照指定行列数生成随机字母数据,并将其转换为dataframe类型的变量
:param:row:指定的行数
:param:columns:指定列数
:return:df
```
columns_name = [f'col_{i+1}' for i in range(columns)]
letters = string.ascii_letters
random_data = np.random.choice(list(letters),size=(rows,columns))
return pd.dataframe(random_data,columns=columns_name)
letters:它是一个字符串,主要是为了后续从中随机选择字母元素

3.统计元素并保存结果
定义函数分别执行统计和对结果的保存:count_analysis和data_save。代码如下:
def count_analysis(df):
all_elements = df.values.flatten()
return counter(all_elements)
def data_save(elements_data):
data = pd.dataframe.from_dict(elements_data,orient='index',columns=['count'])
data.index_name = 'elements'
file_path = './weblog/result.csv' #替换为自己的文件路径
data.to_csv(file_path)
注意事项:
1.df.values.flatten()
df.values:
df 是一个 pandas 的 dataframe 对象,df.values 方法用于获取 dataframe 中的数据,并将其转换为 numpy 的 ndarray(多维数组)对象。该数组包含了 dataframe 中的所有元素,并且保留了原有的数据类型。
ndarray.flatten()
flatten() 是 numpy 数组对象的一个方法,用于将多维数组转换为一维数组。它会按照行优先(c 风格)的顺序将数组中的元素依次排列成一个一维数组。

2.counter类
counter 是 collections 模块中的一个类,它继承自dict,用于统计可迭代对象中每个元素的出现次数。它返回一个字典,其中键是可迭代对象中的元素,值是该元素的出现次数。但是读者应该注意到,我们在将一个counter对象(elements_data)保存为dataframe类型的变量时,使用的是“pd.dataframe.from_dict”方法。
4.执行主函数
准备工作已经完成,接下来配置初始化参数,执行程序:
def main():
row = 40
col = 12
df = generate_data(row,col)
element_data = count_analysis(df)
data_save(element_data)
if __name__ == '__main__':
main()
你将得到一个result.csv文件。
总结:
该方法的优点:我们可以看到使用counter类进行统计,它不会涉及对列名的处理和引用,直抵问题核心,扩展了它的适用范围。
该程序存在哪些可扩展的点
a.首先,可以对其进行扩充,编写一个多文件处理的逻辑,使其能够处理多个数据文件。
b.其次,可以考虑对结果进行筛选,比如我们对元素出现的次数其进行排序,然后选出前几名。
c.对于程序的健壮性,我们还需要考虑数据集里面是否存在缺失值或异常元素。
到此这篇关于python中查找元素的方法详解的文章就介绍到这了,更多相关python查找元素内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论