文章目录
【python】列表元素统计
一、列表元素统计
1.1 原始数据长的样子
方法:
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个
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}')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。