【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}')

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...