首先请注意,如果您有一个普通的 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])