刚开始学python,在数据分析中遇到的基础需求,做一个记录。
需求1:假设df1、df2两个数据集中分别有A、B列数据,需要判断A、B列的数据是否有差异,并显示差异的数据。
需求2:假设有某列数据,需要判断该列数据是否包含重复项,包含的重复项是什么,重复了多少次。
一、需求1解决
1. 生成数据集
import numpy as np
import pandas as pd
df1=pd.DataFrame(np.arange(20).reshape(10,2),columns=list('AN'))
df1.iloc[6,0]=4
df2=pd.DataFrame(np.arange(30).reshape(5,6),columns=list('ABCDEF'))
>>>df1
A N
0 0 1
1 2 3
2 4 5
3 6 7
4 8 9
5 10 11
6 4 13
7 14 15
8 16 17
9 18 19
>>>df2
A B C D E F
0 0 1 2 3 4 5
1 6 7 8 9 10 11
2 12 13 14 15 16 17
3 18 19 20 21 22 23
4 24 25 26 27 28 29
2. 提取需要匹配的列(假设df1中A列,df2中A列)
df1_A=df1.iloc[:,0] # 提取df1中的第1列,生成series df1_A
df2_A=df2.iloc[:,0] # 提取df2中的第1列,生成series df2_A
>>> df1_A
0 0
1 2
2 4
3 6
4 8
5 10
6 4
7 14
8 16
9 18
Name: A, dtype: int32
>>> df2_A=df2.iloc[:,0]
0 0
1 6
2 12
3 18
4 24
Name: A, dtype: int32
3. 判断是否重合
AA = set(df1_A) #df1中被判断的列的集合
BB = set(df2_A) #df2中被判断的列的集合
>>> AA
{0, 2, 4, 6, 8, 10, 14, 16, 18}
>>> BB
{0, 6, 12, 18, 24}
AB=AA&BB #df1和df2共有的数据
>>> AB
{0, 6, 18}
>>> AA-BB #df1有,df2没有的数据
{2, 4, 8, 10, 14, 16}
>>> BB-AA #df1没有,df2有的数据
{12, 24}
>>> len(AB)==len(AA)
False #如果true,df2的A列数据包含df1的A列数据
>>> len(AB)==len(BB)
False #如果true,df1的A列数据包含df2的A列数据
二、需求2解决
1. 数据样例
"""
以df1的第1列数据为例进行该列的重复值查找
"""
>>>df1_A
0 0
1 2
2 4
3 6
4 8
5 10
6 4
7 14
8 16
9 18
Name: A, dtype: int32
2. 样例编写
from collections import Counter
datac=Counter(df1_A) #生成集合,key值是df1_A的各元素,value值是各元素在df1_A中出现的次数。若value不等于1,则是重复值
"""
编写一个导出重复值的数据(list形式)的函数
"""
repectlist=[] #重复元素
repectdic={} #重复元素的字典:key值是重复的元素,value是重复次数统计
uniqlist=[] #不重复的元素
for key, val in datac.items():
if val != 1:
repectlist.append(key)
repectdic.update({key : val})
else:
uniqlist.append(key)
3. 结果输出验证
如果:重复的元素列表的长度len()是0,则df1_A列没有重复元素
>>> print(repectlist)
[4] #重复的元素列表
>>> print(uniqlist)
[0, 2, 6, 8, 10, 14, 16, 18] #不重复的元素列表
>>> print(repectdic)
{4: 2} #重复的元素及对应的出现次数
>>> len(repectlist)
1