python:pandas数值统计,.value_counts()的用法,全DataFrame数据计数

本文记录了使用python语言中的numpy模块,来对Excel表格数据中的值进行统计的代码,统计全表中某一值或者字符出现的个数,以及某一行,某一列中该值出现的个数。主要使用的函数是.value_counts()。



一、函数介绍

.value_counts() 计数

value_counts( values, sort=True, ascending=False, normalize=False, bins=None, dropna=True)

参数名 作用
sort=True 是否要进行排序(默认:进行排序)
ascending=False (默认:降序排列)
normalize=False 是否要对计算结果进行标准化,并且显示标准化后的结果(默认:False)
bins=None 可以自定义分组区间(默认:否)
dropna=True 是否删除缺失值nan(默认:删除)

二、.value_counts()对一列数据计数

有时候,运算结果中间不完全显示,有人称为“截断数据”。我们把数据输出为csv,输出函数加上mode=‘a’就可以看到全部数据了
输出数据:
不完全显示的的数据
将结果全部输出为csv后可以全部看到
加参数以后的输出结果

df = df["RA_C"].value_counts()

print(df)

df.to_csv("df.csv",mode='a')

三、统计多列数据(不同列属性相同)中重复出现的值

对Excel表格全部数据计数, 不只是一列。

pieces = []

for col in dfS.columns:

	tmp_series = df[col].value_counts()
	
	tmp_series.name = col
	
	pieces.append(tmp_series)
	
	df_value_counts = pd.concat(pieces, axis=1)

结果如图所示:
每一列的数值出现的次数都有,如果想知道全表格出现的次数,就求和。
在这里插入图片描述


#将NaN填充为0
df = df_value_counts.fillna(0)
 
#添加新的一行:对每一行求和
df["Total"] =df.apply(lambda x:x.sum(),axis =1)
  
#只提取index和Total
df = df[['Total']]  

# 只显示df的前5行
print(df.head())

# 将结果输出为csv文件
df.to_csv("result_3.csv",mode='a')

结果如下:可知数值221出现在excel表中的数目为132825次,222出现94924次,220出现9276次…
在这里插入图片描述
输出结果在Excel中排序,就可以知道数值的多少了


.value_counts()

四、统计多列数据(不同列属性不同 )中重复出现的值

输入:

输出:计数结果
在这里插入图片描述

import pandas as pd
import os 
os.chdir(r'C:\Users\Administrator\Desktop')
df = pd.read_excel('数据.xls')
def fun(df):
    dic = {
    
    }
    for i in df.columns:
        dic[i] = df[i].value_counts()
    return dic
dd = fun(df)

# 写入excel
import xlwt
f = xlwt.Workbook() #创建工作薄
sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = 5  
 
style = xlwt.XFStyle()
style.pattern = pattern

al = xlwt.Alignment()
al.horz = 0x02 # 设置水平居中
al.vert = 0x01 # 设置垂直居中
style.alignment = al
# 获取字典的键
list_ = [k  for  k in  dd]
k=0
l=0
for s in range(len(dd)):
    l=k+1
    # 写入第一行
    sheet1.write_merge(0, 1, k, l,list_[s] , style)
    # 写入内容
    j = 2
    for v,h  in zip(dd[list_[s]],dd[list_[s]].index):
        sheet1.write(j,k,h) #循环写入 竖着写 
        sheet1.write(j,l,v) #循环写入 竖着写 
        j=j+1
    k=k+3
f.save('统计数据.xls')#保存文件

猜你喜欢

转载自blog.csdn.net/qq_35591253/article/details/115639032
今日推荐