如何计算Pandas列中特定值的出现次数
在这篇文章中,我们将讨论如何在pandas列中计算一个特定列值的出现次数。
使用中的数据集。
我们可以通过使用value_counts()方法进行计数。这个函数用来计算整个数据框架中存在的数值,也可以计算某一列的数值。
语法 :
data['column_name'].value_counts()[value]
其中,
- data是输入数据帧
- value是指要计算的列中存在的字符串/整数值
- column_name是数据框架中的列。
例子 :要计算一个特定值的出现次数
# import pandas module
import pandas as pd
# create a dataframe
# with 5 rows and 4 columns
data = pd.DataFrame({
'name': ['sravan', 'ojsawi', 'bobby', 'rohith',
'gnanesh', 'sravan', 'sravan', 'ojaswi'],
'subjects': ['java', 'php', 'java', 'php', 'java',
'html/css', 'python', 'R'],
'marks': [98, 90, 78, 91, 87, 78, 89, 90],
'age': [11, 23, 23, 21, 21, 21, 23, 21]
})
# count values in name column
print(data['name'].value_counts()['sravan'])
# count values in subjects column
print(data['subjects'].value_counts()['php'])
# count values in marks column
print(data['marks'].value_counts()[89])
输出:
3
2
1
如果我们想计算某一列的所有数值,那么我们就不需要提到这个数值。
语法 :
data['column_name'].value_counts()
例子:要计算一个值在某一列中的出现次数
# import pandas module
import pandas as pd
# create a dataframe
# with 5 rows and 4 columns
data = pd.DataFrame({
'name': ['sravan', 'ojsawi', 'bobby', 'rohith',
'gnanesh', 'sravan', 'sravan', 'ojaswi'],
'subjects': ['java', 'php', 'java', 'php', 'java',
'html/css', 'python', 'R'],
'marks': [98, 90, 78, 91, 87, 78, 89, 90],
'age': [11, 23, 23, 21, 21, 21, 23, 21]
})
# count all values in name column
print(data['name'].value_counts())
# count all values in subjects column
print(data['subjects'].value_counts())
# count all values in marks column
print(data['marks'].value_counts())
# count all values in age column
print(data['age'].value_counts())
输出:
如果我们想按顺序获得结果(如升序和降序),我们必须指定参数
语法:
升序:
data[‘column_name’].value_counts(ascending=True)
降序:
data[‘column_name’].value_counts(ascending=False)
例子:要以一种有序的方式获得结果
# import pandas module
import pandas as pd
# create a dataframe
# with 5 rows and 4 columns
data = pd.DataFrame({
'name': ['sravan', 'ojsawi', 'bobby', 'rohith',
'gnanesh', 'sravan', 'sravan', 'ojaswi'],
'subjects': ['java', 'php', 'java', 'php', 'java',
'html/css', 'python', 'R'],
'marks': [98, 90, 78, 91, 87, 78, 89, 90],
'age': [11, 23, 23, 21, 21, 21, 23, 21]
})
# count all values in name column in ascending order
print(data['name'].value_counts(ascending=True))
# count all values in subjects column in ascending order
print(data['subjects'].value_counts(ascending=True))
# count all values in marks column in descending order
print(data['marks'].value_counts(ascending=False))
# count all values in age column in descending order
print(data['age'].value_counts(ascending=False))
输出:
处理缺失值的问题
这里我们可以计算有无NA值的出现。通过使用dropna参数,如果设置为True,则包括NA值,如果设置为False,则不计算NA。
语法 :
包括 NA 值:
data[‘column_name’].value_counts(dropna=True)
不包括NA 值:
data[‘column_name’].value_counts(dropna=False)
例子:处理缺失值的问题
# import pandas module
import pandas as pd
#import numpy
import numpy
# create a dataframe
# with 5 rows and 4 columns
data = pd.DataFrame({
'name': ['sravan', 'ojsawi', 'bobby', 'rohith', 'gnanesh',
'sravan', 'sravan', 'ojaswi', numpy.nan],
'subjects': ['java', 'php', 'java', 'php', 'java', 'html/css',
'python', 'R', numpy.nan],
'marks': [98, 90, 78, 91, 87, 78, 89, 90, numpy.nan],
'age': [11, 23, 23, 21, 21, 21, 23, 21, numpy.nan]
})
# count all values in name column including NA
print(data['name'].value_counts(dropna=False))
# count all values in subjects column including NA
print(data['subjects'].value_counts(dropna=False))
# count all values in marks column excluding NA
print(data['marks'].value_counts(dropna=False))
# count all values in age column excluding NA
print(data['age'].value_counts(dropna=True))
输出:
具有相对频率的计数值
我们要添加normalize参数来获得重复数据的相对频率。它被设置为True。
语法:
data[‘column_name’].value_counts(normalize=True)
例子:具有相对频率的计数值
# import pandas module
import pandas as pd
# create a dataframe
# with 5 rows and 4 columns
data = pd.DataFrame({
'name': ['sravan', 'ojsawi', 'bobby', 'rohith',
'gnanesh', 'sravan', 'sravan', 'ojaswi'],
'subjects': ['java', 'php', 'java', 'php', 'java',
'html/css', 'python', 'R'],
'marks': [98, 90, 78, 91, 87, 78, 89, 90],
'age': [11, 23, 23, 21, 21, 21, 23, 21]
})
# count all values in name with relative frequencies
print(data['name'].value_counts(normalize=True))
输出:
sravan 0.375
ojaswi 0.125
ojsawi 0.125
bobby 0.125
rohith 0.125
gnanesh 0.125
Name: name, dtype: float64
获取详细信息
如果我们想获得计数、平均值、标准差、最小值、25%、50%、75%、最大值等详细信息,那么我们必须使用describe()方法。
语法 :
data['column_name'].describe()
示例:获得详细信息
# import pandas module
import pandas as pd
# create a dataframe
# with 5 rows and 4 columns
data = pd.DataFrame({
'name': ['sravan', 'ojsawi', 'bobby', 'rohith',
'gnanesh', 'sravan', 'sravan', 'ojaswi'],
'subjects': ['java', 'php', 'java', 'php', 'java',
'html/css', 'python', 'R'],
'marks': [98, 90, 78, 91, 87, 78, 89, 90],
'age': [11, 23, 23, 21, 21, 21, 23, 21]
})
# get about age
print(data['age'].describe())
输出:
count 8.000000
mean 20.500000
std 3.964125
min 11.000000
25% 21.000000
50% 21.000000
75% 23.000000
max 23.000000
Name: age, dtype: float64
使用size()和groupby()
在这里,这将返回某一列中所有出现的计数。
语法 :
data.groupby('column_name').size()
例子 :对某一列中所有出现的情况进行计数
# import pandas module
import pandas as pd
# create a dataframe
# with 5 rows and 4 columns
data = pd.DataFrame({
'name': ['sravan', 'ojsawi', 'bobby', 'rohith',
'gnanesh', 'sravan', 'sravan', 'ojaswi'],
'subjects': ['java', 'php', 'java', 'php', 'java',
'html/css', 'python', 'R'],
'marks': [98, 90, 78, 91, 87, 78, 89, 90],
'age': [11, 23, 23, 21, 21, 21, 23, 21]
})
# get the size of name
print(data.groupby('name').size())
输出:
name
bobby 1
gnanesh 1
ojaswi 1
ojsawi 1
rohith 1
sravan 3
dtype: int64
使用count()和groupby()
在这里,这将返回所有列中某一列的所有出现的计数。
语法 :
data.groupby('column_name').count()
例子 :对某一列中所有出现的情况进行计数
# import pandas module
import pandas as pd
# create a dataframe
# with 5 rows and 4 columns
data = pd.DataFrame({
'name': ['sravan', 'ojsawi', 'bobby', 'rohith',
'gnanesh', 'sravan', 'sravan', 'ojaswi'],
'subjects': ['java', 'php', 'java', 'php', 'java',
'html/css', 'python', 'R'],
'marks': [98, 90, 78, 91, 87, 78, 89, 90],
'age': [11, 23, 23, 21, 21, 21, 23, 21]
})
# get the count of name across all columns
print(data.groupby('name').count())
输出:
使用 bins
如果我们想得到某个特定范围内的计数,那么就应用bins参数。我们可以指定范围(bins)的数量。
语法:
(data['column_name'].value_counts(bins)
其中,
- data是输入数据帧
- column_name是要得到的列。
- bins是指要指定的分选区总数
例子:在特定的数值范围内获取计数
# import pandas module
import pandas as pd
# create a dataframe
# with 5 rows and 4 columns
data = pd.DataFrame({
'name': ['sravan', 'ojsawi', 'bobby', 'rohith',
'gnanesh', 'sravan', 'sravan', 'ojaswi'],
'subjects': ['java', 'php', 'java', 'php', 'java',
'html/css', 'python', 'R'],
'marks': [98, 90, 78, 91, 87, 78, 89, 90],
'age': [11, 23, 23, 21, 21, 21, 23, 21]
})
# get count of age column with 6 bins
print(data['age'].value_counts(bins=6))
# get count of age column with 4 bins
print(data['age'].value_counts(bins=4))
输出:
(19.0, 21.0] 4
(21.0, 23.0] 3
(10.987, 13.0] 1
(17.0, 19.0] 0
(15.0, 17.0] 0
(13.0, 15.0] 0
Name: age, dtype: int64
(20.0, 23.0] 7
(10.987, 14.0] 1
(17.0, 20.0] 0
(14.0, 17.0] 0
Name: age, dtype: int64
使用 apply()
如果我们想获得所有列的计数,那么我们必须使用apply()函数。在此,我们将使用value_counts()方法。
语法:
data.apply(pd.value_counts)
例子:获得所有列的计数,跨所有列的计数
# import pandas module
import pandas as pd
# create a dataframe
# with 5 rows and 4 columns
data = pd.DataFrame({
'name': ['sravan', 'bobby', 'sravan', 'sravan', 'ojaswi'],
'subjects': ['java', 'php', 'java', 'html/css', 'python'],
'marks': [98, 90, 78, 91, 87],
'age': [11, 23, 23, 21, 21]
})
# get all count
data.apply(pd.value_counts)
输出: