文章目录

  • 【python】列表元素统计
  • 一、列表元素统计
  • 1.1 原始数据长的样子
  • 1.2 方法一:使用标准 Python库
  • 2.3 方法二:使用pandas
  • 2.4 图像展示
  • 二、数据清洗


【python】列表元素统计

一、列表元素统计

1.1 原始数据长的样子

python统计某列不同值的个数 python列表数据统计_列表元素统计


目标: 对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统计某列不同值的个数 python列表数据统计_列表元素统计_02

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

python统计某列不同值的个数 python列表数据统计_Windows_03

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

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统计某列不同值的个数 python列表数据统计_原始数据_04

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

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

python统计某列不同值的个数 python列表数据统计_Windows_05

2.3 方法二:使用pandas

首先,我们先回顾一下,我们的原始数据:一个列表,元素为字典形式,实则就是列表套的字典。

python统计某列不同值的个数 python列表数据统计_列表元素统计_06


现在,我们使用pandas库文件进行读取:

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

python统计某列不同值的个数 python列表数据统计_Windows_07


现在再来看我们的统计结果:

python统计某列不同值的个数 python列表数据统计_Windows_08

2.4 图像展示

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

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

python统计某列不同值的个数 python列表数据统计_Windows_09

二、数据清洗

先来看一下原始数据长什么样子:

python统计某列不同值的个数 python列表数据统计_列表元素统计_10


我们的目标是对a列进行一个是否是windowns用户一个分析。

我们先来简单处理一下数据:

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

python统计某列不同值的个数 python列表数据统计_Python_11


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

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

python统计某列不同值的个数 python列表数据统计_列表元素统计_12


现在根据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]

python统计某列不同值的个数 python列表数据统计_列表元素统计_13

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

这里是通过size对分组进行计数,并且利用unstack对计数结果实现重塑:

python统计某列不同值的个数 python列表数据统计_列表元素统计_14


关于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}')