Python:计算python数据框中每个数字的出现次数

Posted

技术标签:

【中文标题】Python:计算python数据框中每个数字的出现次数【英文标题】:Python: Count occurrences of each number in a python data-frame 【发布时间】:2021-05-22 19:20:17 【问题描述】:

我有一个用于项集挖掘的数据集。我想找到每个唯一数字的出现次数,即候选 1 项集。

数据的形状是 3000x1。我无法弄清楚如何计算独特的出现次数。

存储数据的不同值列表。

使用ndarray distinct,如何找到数据集中每个项目的频率?

更新 在@jojo 的帮助下得到了解决方案。

df = pd.read_csv('sample.csv', sep=',')
all_values = dataset.values.ravel()
notNan = np.logical_not(np.isnan(all_values))
distinct, counts = np.unique(all_values[notNan], return_counts=True)

【问题讨论】:

【参考方案1】:

首先请注意,如果您有一个普通的 csv(逗号分隔),您应该使用sep=','。这是因为'\t' 假定 TAB 作为分隔符。

另外,请考虑在 read_csv 调用中添加 header=None,否则第一行将被视为数据框中的列名。

最后,由于列的长度不同,所有列中的nan 值都比最长列短,要删除它们,您可以在获取唯一值时屏蔽所有nan 值。类似于values[np.logical_not(np.isnan(values))],但见下文。


把东西放在一起:

dataset = pd.read_csv('dataset.csv', sep=',', header=None)

all_values = dataset.values.ravel()

您可以直接使用unique from numpy 来获取每个唯一值的计数:

import numpy as np
notNan = np.logical_not(np.isnan(all_values))
distinct, counts = np.unique(all_values[notNan], return_counts=True)

如果您关心频率,只需将counts 除以all_values[notNan].size


这里有一个简单的例子(来自上面链接的文档)来强调 np.unique 的工作原理:

>>> import numpy as np
>>> a = np.array([1, 2, 6, 4, 2, 3, 2])
>>> values, counts = np.unique(a, return_counts=True)
>>> values  # list of all unique values in a
array([1, 2, 3, 4, 6])
>>> counts  # count of the occurrences of each value in values
array([1, 3, 1, 1, 1])

【讨论】:

谢谢,我根据您的建议更新了我的代码。请查看我对帖子所做的更新 1。你能解释一下输出吗?不同的数组正在计算一些数字,但这些数字肯定不是唯一值,因为它们正在重复。正确的?计数数组也是1。请详细说明。 谢谢。但是正如您所看到的,事件 distint 正在返回具有多个 0 和 10 等的数组。所以这实际上并不是唯一的。这可能是什么原因?请注意,我的数据集是 3000x1。我还添加了一个 excel 屏幕截图以使可视化清晰。 是的。我想分别处理它们。我更新了代码,但出现错误。请参考update-2。 我想在整个 csv 中获取唯一值。例如,计算整个数据集中第 23 项的出现次数等等。 最终我想返回一个包含两列的表。第一个是唯一的项目集值,下一列包含该项目集在整个 csv 中的总出现次数。选择 pandas 没有特别的理由,我也可以随意使用其他数据加载器。

以上是关于Python:计算python数据框中每个数字的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

在使用数字列表搜索列后返回数据框中的所有行 - Python/Pandas

有没有比在 python 中使用 loc 更快的方法来根据现有数据框填充数据框中的新列?

Python 通用的序列操作

python pandas用数字替换数据框中的字符串

根据 Python 中的一个标准提取字符串数据框中的数字

Python:需要在数据框中找到每个试验的开始