在做数据挖掘时,查看训练集、测试集数据的情况时,有时需要查看两者之间不同的值和相同的值。
import pandas as pd
import numpy as np
data1 = pd.DataFrame({
'a':[1,2,3,4,5,6,7,8,9,9]
})
data2 = pd.DataFrame({
'a':[1,12,13,14,15,16,17,18,19,19]
})
def same_element(list1,list2):
set1 = set(list1)
set2 = set(list2)
return (set1 & set2),(set1 ^ set2),((set1|set2)-set2),((set1|set2)-set1)
same,dif,alone_forward,alone_backward = same_element(data1['a'],data2['a'])
print('相同的元素:',same,'相同元素个数:',len(same))
print('不同的元素:',dif,'不相同的元素个数:',len(dif))
print('列表1有列表2没有的元素:',alone_forward,'列表1有列表2没有的元素个数:',len(alone_forward))
print('列表1没有列表2有的元素:',alone_backward,'列表1没有列表2有的元素个数:',len(alone_backward))
结果如下:
相同的元素: {1} 相同元素个数: 1
不同的元素: {2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15, 16, 17, 18, 19} 不相同的元素个数: 16
列表1有列表2没有的元素: {2, 3, 4, 5, 6, 7, 8, 9} 列表1有列表2没有的元素个数: 8
列表1没有列表2有的元素: {12, 13, 14, 15, 16, 17, 18, 19} 列表1没有列表2有的元素个数: 8
一列一列的查看太慢,所以改进一下:
train_data = pd.DataFrame({
'a':[1,2,3,4,5,5],
'b':['k','g','k','t','a','p']
})
test_data = pd.DataFrame({
'a':[1,12,13,14,19,19],
'b':['g','b','y','k','d','y']
})
def same_element(train_data,test_data):
col_list = train_data.columns.tolist()
for i in col_list:
set1 = set(train_data[i])
set2 = set(test_data[i])
print(i,'相同的元素:', (set1 & set2), i,'相同元素的个数:', len(set1 & set2))
print(i,'不同的元素:', (set1 ^ set2), i, '不相同的元素个数:', len(set1 ^ set2))
print(i,'train_data有test_data没有的元素:', ((set1|set2)-set2), i,'train_data有test_data没有的元素个数:', len(((set1|set2)-set2)))
print(i,'train_data没有test_data有的元素:', ((set1|set2)-set1), i, 'train_data没有test_data有的元素个数:', len(((set1|set2)-set1)))
same_element(train_data,test_data)
结果为:
a 相同的元素: {1} a 相同元素个数: 1
a 不同的元素: {2, 3, 4, 5, 12, 13, 14, 19} a 不相同的元素个数: 8
a train_data有test_data没有的元素: {2, 3, 4, 5} a train_data有test_data没有的元素个数: 4
a train_data没有test_data有的元素: {19, 12, 13, 14} a train_data没有test_data有的元素个数: 4
b 相同的元素: {'k', 'g'} b 相同元素个数: 2
b 不同的元素: {'b', 'y', 'a', 't', 'd', 'p'} b 不相同的元素个数: 6
b train_data有test_data没有的元素: {'t', 'p', 'a'} b train_data有test_data没有的元素个数: 3
b train_data没有test_data有的元素: {'b', 'y', 'd'} b train_data没有test_data有的元素个数: 3