【python】列表元素统计

【python】列表元素统计

一、列表元素统计

1.1 原始数据长的样子

在这里插入图片描述
目标: 对list中的数据进行统计(其实就是对相同元素的数据进行一个统计)
方法:

方法一: 使用标准 Python库
方法二: 使用 pandas

1.2 方法一:使用标准 Python库

def get_counts(sequence):
    counts = {}
    for x in sequence:
        if x in counts:
            counts[x] += 1
        else:
            counts[x] = 1
    return counts

在这里插入图片描述

# 如果非常了解 Python标准库,那么你可能会将代码写得更简洁一些:
from collections import defaultdict
def get_counts2(sequence):
    counts = defaultdict(int) # 所有的值均会被初始化为0
    for x in sequence:
        counts[x] += 1
    return counts

在这里插入图片描述

对于获取的结果,我们还可以进一步实现一个统计

def top_counts(count_dict, n=10):
    value_key_pairs = [(count, tz) for tz, count in count_dict.items()]
    value_key_pairs.sort() # 排序
    return value_key_pairs[-n:] # 倒数10个 

在这里插入图片描述

同样,可以采用python标准库,进行一个结果统计

from collections import Counter
counts = Counter(time_zones)
counts.most_common(10)

在这里插入图片描述

2.3 方法二:使用pandas

首先,我们先回顾一下,我们的原始数据:一个列表,元素为字典形式,实则就是列表套的字典。
在这里插入图片描述
现在,我们使用pandas库文件进行读取:

import pandas as pd
import numpy as np
frame = pd.DataFrame(recodes)

在这里插入图片描述
现在再来看我们的统计结果:
在这里插入图片描述

2.4 图像展示

我们再来绘制一个图像查看一下:

# 首先我们先处理一下位置或者缺失值
clean_tz = frame['tz'].fillna('missing')
clean_tz[clean_tz==''] = 'unknown'
tz_counts = clean_tz.value_counts()
tz_counts[:10]

在这里插入图片描述

二、数据清洗

先来看一下原始数据长什么样子:
在这里插入图片描述
我们的目标是对a列进行一个是否是windowns用户一个分析。
我们先来简单处理一下数据:

recodes = Series([x.split()[0] for x in frame.a.dropna()])

在这里插入图片描述
现在,为了简单方便起见。我们假定只要字符串中含有"Windows"就认为该用户为Windows用户,由于有的字符串缺失,所以首先将它们从数据中移除:

cframe = frame[frame.a.notnull()]
cframe

在这里插入图片描述
现在根据a值计算出各行是否是windows:

"""
#如果A%2==0成立,则执行A+1,否则执行A-1

>>> A

array([1, 7, 4, 9, 2, 3, 6, 0, 8, 5])

>>> B = np.where(A%2 == 0, A+1, A-1)   # 偶+1,奇-1

"""
operating_system = np.where(cframe['a'].str.contains('Windows'), 'Windows', 'Not Windows')

现在来看看结果:

operating_system[:5]

# 接下来就可以根据时区和新得到的操作系统列表对数据进行分组了:
by_tz_os = cframe.groupby(['tz',  operating_system])
agg_counts = by_tz_os.size().unstack().fillna(0)

这里是通过size对分组进行计数,并且利用unstack对计数结果实现重塑:
在这里插入图片描述
关于unstack函数可查看:

import numpy as np
import pandas as pd
from pandas import Series,DataFrame
data=DataFrame(np.arange(6).reshape((2,3)),index=pd.Index(['street1','street2']),columns=pd.Index(['one','two','three']))
print(f'data={data}')
print('-----------------------------------------\n')
data2=data.stack()
data3=data2.unstack()
print(data2)
print('-----------------------------------------\n')
print(f'data3={data3}')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jjkqjj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值