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