如何计算Pandas数据框架列的不同值
让我们看看如何计算Pandas数据框架列的不同值?
考虑一个表格结构,如下图所示,它必须被创建为数据框架。列是身高,体重和年龄。8个学生的记录构成行。
name | 身高 | 体重 | 年龄 |
---|---|---|---|
Steve | 165 | 63.5 | 20 |
Ria | 164 | 63.5 | 22 |
Jane | 158 | 54 | 21 |
Kate | 167 | 63.5 | 23 |
Lucy | 160 | 62 | 22 |
Ram | 158 | 64 | 20 |
Niki | 165 | 64 | 21 |
第一步是为上述表格创建Dataframe。请看下面的代码片断。
# import library
import pandas as pd
# create a Dataframe
df = pd.DataFrame({
'height' : [165, 165, 164,
158, 167, 160,
158, 165],
'weight' : [63.5, 64, 63.5,
54, 63.5, 62,
64, 64],
'age' : [20, 22, 22,
21, 23, 22,
20, 21]},
index = ['Steve', 'Ria', 'Nivi',
'Jane', 'Kate', 'Lucy',
'Ram', 'Niki'])
# show the Dataframe
df
输出:
方法1:使用for循环。
数据框架已经创建,人们可以使用for循环进行硬编码,并计算特定列中唯一值的数量。例如 在上表中,如果希望计算列height中的唯一值的数量。我们的想法是用一个变量cnt来存储计数,用一个列表visit来存储以前访问的值。然后用for循环遍历’height’列,对于每一个值,它检查相同的值是否已经在被访问列表中被访问过。如果该值以前没有被访问过,那么计数将增加1。
以下是实现情况。
# import library
import pandas as pd
# create a Dataframe
df = pd.DataFrame({
'height' : [165, 165, 164,
158, 167, 160,
158, 165],
'weight' : [63.5, 64, 63.5,
54, 63.5, 62,
64, 64],
'age' : [20, 22, 22,
21, 23, 22,
20, 21]},
index = ['Steve', 'Ria', 'Nivi',
'Jane', 'Kate', 'Lucy',
'Ram', 'Niki'])
# variable to hold the count
cnt = 0
# list to hold visited values
visited = []
# loop for counting the unique
# values in height
for i in range(0, len(df['height'])):
if df['height'][i] not in visited:
visited.append(df['height'][i])
cnt += 1
print("No.of.unique values :",
cnt)
print("unique values :",
visited)
输出 :
No.of.unique values : 5
unique values : [165, 164, 158, 167, 160]
但是,当数据框架的规模越来越大,包含成千上万的行和列时,这种方法就不那么有效了。为了提供一个有效的方法,有三种方法可用,下面列出。
- pandas.unique()
- Dataframe.nunique()
- Series.value_counts()
方法2:使用unique().
unique方法接受一个一维数组或系列作为输入,并返回其中的唯一项目列表。返回值是一个NumPy数组和其中的内容,基于所传递的输入。如果索引作为输入被提供,那么返回值也将是唯一值的索引。
语法: pandas.unique(Series)
示例:
# import library
import pandas as pd
# create a Dataframe
df = pd.DataFrame({
'height' : [165, 165, 164,
158, 167, 160,
158, 165],
'weight' : [63.5, 64, 63.5,
54, 63.5, 62,
64, 64],
'age' : [20, 22, 22,
21, 23, 22,
20, 21]},
index = ['Steve', 'Ria', 'Nivi',
'Jane', 'Kate', 'Lucy',
'Ram', 'Niki'])
# counting unique values
n = len(pd.unique(df['height']))
print("No.of.unique values :",
n)
输出:
No.of.unique values : 5
方法3:使用 Dataframe.nunique() .
该方法返回指定axis中唯一值的数量。语法是:
语法: Dataframe.nunique (axis=0/1, dropna=True/False)
示例:
# import library
import pandas as pd
# create a Dataframe
df = pd.DataFrame({
'height' : [165, 165, 164,
158, 167, 160,
158, 165],
'weight' : [63.5, 64, 63.5,
54, 63.5, 62,
64, 64],
'age' : [20, 22, 22,
21, 23, 22,
20, 21]},
index = ['Steve', 'Ria', 'Nivi',
'Jane', 'Kate', 'Lucy',
'Ram', 'Niki'])
# check the values of
# each row for each column
n = df.nunique(axis=0)
print("No.of.unique values in each column :\n",
n)
输出:
No.of.unique values in each column :
height 5
weight 4
age 4
dtype: int64
要获得指定列中唯一值的数量。
语法: Dataframe.col_name.nunique()
示例:
# import library
import pandas as pd
# create a Dataframe
df = pd.DataFrame({
'height' : [165, 165, 164,
158, 167, 160,
158, 165],
'weight' : [63.5, 64, 63.5,
54, 63.5, 62,
64, 64],
'age' : [20, 22, 22,
21, 23, 22,
20, 21]},
index = ['Steve', 'Ria', 'Nivi',
'Jane', 'Kate', 'Lucy',
'Ram', 'Niki'])
# count no. of unique
# values in height column
n = df.height.nunique()
print("No.of.unique values in height column :",
n)
输出:
No.of.unique values in height column : 5
方法3:使用Series.value_counts()
该方法返回指定列中所有唯一值的计数。
语法: Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)
示例:
# import library
import pandas as pd
# create a Dataframe
df = pd.DataFrame({
'height' : [165, 165, 164,
158, 167, 160,
158, 165],
'weight' : [63.5, 64, 63.5,
54, 63.5, 62,
64, 64],
'age' : [20, 22, 22,
21, 23, 22,
20, 21]},
index = ['Steve', 'Ria', 'Nivi',
'Jane', 'Kate', 'Lucy',
'Ram', 'Niki'])
# getting the list of unique values
li = list(df.height.value_counts())
# print the unique value counts
print("No.of.unique values :",
len(li))
输出:
No.of.unique values : 5