Python Pandas 计算特定值的出现次数
- 2025-03-04 08:24:00
- admin 原创
- 45
问题描述:
我试图找出某个值在一列中出现的次数。
我已经用data = pd.DataFrame.from_csv('data/DataSet2.csv')
现在我想找出某项在列中出现的次数。该怎么做?
我以为是下面的内容,我正在查看教育专栏并计算发生的次数?
。
下面的代码显示我正在尝试查找出现的次数9th
,而错误是我运行代码时得到的
代码
missing2 = df.education.value_counts()['9th']
print(missing2)
错误
KeyError: '9th'
解决方案 1:
您可以subset
根据您的条件创建数据,然后使用shape
或len
:
print df
col1 education
0 a 9th
1 b 9th
2 c 8th
print df.education == '9th'
0 True
1 True
2 False
Name: education, dtype: bool
print df[df.education == '9th']
col1 education
0 a 9th
1 b 9th
print df[df.education == '9th'].shape[0]
2
print len(df[df['education'] == '9th'])
2
性能很有趣,最快的解决方案是比较 numpy 数组和sum
:
代码:
import perfplot, string
np.random.seed(123)
def shape(df):
return df[df.education == 'a'].shape[0]
def len_df(df):
return len(df[df['education'] == 'a'])
def query_count(df):
return df.query('education == "a"').education.count()
def sum_mask(df):
return (df.education == 'a').sum()
def sum_mask_numpy(df):
return (df.education.values == 'a').sum()
def make_df(n):
L = list(string.ascii_letters)
df = pd.DataFrame(np.random.choice(L, size=n), columns=['education'])
return df
perfplot.show(
setup=make_df,
kernels=[shape, len_df, query_count, sum_mask, sum_mask_numpy],
n_range=[2**k for k in range(2, 25)],
logx=True,
logy=True,
equality_check=False,
xlabel='len(df)')
解决方案 2:
count
使用或的几种方法sum
In [338]: df
Out[338]:
col1 education
0 a 9th
1 b 9th
2 c 8th
In [335]: df.loc[df.education == '9th', 'education'].count()
Out[335]: 2
In [336]: (df.education == '9th').sum()
Out[336]: 2
In [337]: df.query('education == "9th"').education.count()
Out[337]: 2
解决方案 3:
计算任意列中任意符号的出现次数的一种优雅方法是使用数据框对象的'?'
内置函数。isin
假设我们已经将“汽车”数据集加载到df
对象中。我们不知道哪些列包含缺失值('?'
符号),因此让我们这样做:
df.isin(['?']).sum(axis=0)
DataFrame.isin(values)
官方文件说:
它返回布尔 DataFrame,显示 DataFrame 中的每个元素是否包含在值中
请注意,isin
接受可迭代作为输入,因此我们需要将包含目标符号的列表传递给此函数。df.isin(['?'])
将返回如下布尔数据框。
symboling normalized-losses make fuel-type aspiration-ratio ...
0 False True False False False
1 False True False False False
2 False True False False False
3 False False False False False
4 False False False False False
5 False True False False False
...
为了计算每列中目标符号的出现次数,让我们sum
通过指示来接管上述数据框的所有行axis=0
。最终(截断)结果显示了我们的预期:
symboling 0
normalized-losses 41
...
bore 4
stroke 4
compression-ratio 0
horsepower 2
peak-rpm 2
city-mpg 0
highway-mpg 0
price 4
解决方案 4:
尝试一下:
(df[education]=='9th').sum()
解决方案 5:
简单但不高效:
list(df.education).count('9th')
解决方案 6:
计算 Pandas 数据框中某一列出现次数(唯一值)的简单示例:
import pandas as pd
# URL to .csv file
data_url = 'https://yoursite.com/Arrests.csv'
# Reading the data
df = pd.read_csv(data_url, index_col=0)
# pandas count distinct values in column
df['education'].value_counts()
输出:
Education 47516
9th 41164
8th 25510
7th 25198
6th 25047
...
3rd 2
2nd 2
1st 2
Name: name, Length: 190, dtype: int64
解决方案 7:
要查找某一列的特定值,您可以使用以下代码
无论偏好如何,您都可以使用任何您喜欢的方法
df.col_name.value_counts().Value_you_are_looking_for
以泰坦尼克号数据集为例
df.Sex.value_counts().male
这样就可以统计船上所有男性的数量,但是如果你想要统计数值数据,那么你就不能使用上面的方法,因为 value_counts() 只用于系列类型的数据,因此会失败,因此你可以使用第二种方法示例
第二种方法是
#this is an example method of counting on a data frame
df[(df['Survived']==1)&(df['Sex']=='male')].counts()
这不像 value_counts() 那么有效,但如果你想计算数据框的值,它肯定会有所帮助,希望这会有所帮助
编辑--如果你想寻找中间有空格的东西
你可以使用
df.country.count('united states')
我相信这应该能解决问题
解决方案 8:
我认为这可能是一个更简单的解决方案。假设您有以下数据框。
DATE LANG POSTS
2008-07-01 c# 3
2008-08-01 assembly 8
2008-08-01 javascript 2
2008-08-01 c 85
2008-08-01 python 11
2008-07-01 c# 3
2008-08-01 assembly 8
2008-08-01 javascript 62
2008-08-01 c 85
2008-08-01 python 14
您可以像这样找到 LANG 项的出现次数总和
df.groupby('LANG').sum()
你将得到每种语言的总数