说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
有时候我们收集的数据,是按列布局的,但是我们并不需要它列的特征,只想知道这些数据的不重复的值有哪些,我们来看看如何利用 pandas 和 NumPy 来实现这些需求。
源数据如下:
import pandas as pd
df = pd.DataFrame({'Col1': ['Bob', 'Joe', 'Bill', 'Mary', 'Joe'],
'Col2': ['Joe', 'Steve', 'Bob', 'Bob', 'Steve'],
})
df
'''
Col1 Col2
0 Bob Joe
1 Joe Steve
2 Bill Bob
3 Mary Bob
4 Joe Steve
'''
此数据有两个列,现在需要得到这两列数据中所有值的不重复值。
我们可以将这个 DataFrame 的所有数据展平,然后再用 pandas 的顶级函数 pd.unique() 获得不重复值。
我们先获取 DataFrame 的 NumPy array 结构数据,有两种方法:
df.values
df.to_numpy() # 同上效果
'''
array([['Bob', 'Joe'],
['Joe', 'Steve'],
['Bill', 'Bob'],
['Mary', 'Bob'],
['Joe', 'Steve']], dtype=object)
'''
然后将这些数据展平,也有 array 的两个方法实现:
df.values.ravel()
df.values.flatten() # 同上效果
'''
array(['Bob', 'Joe', 'Joe', 'Steve', 'Bill', 'Bob', 'Mary', 'Bob', 'Joe',
'Steve'], dtype=object)
'''
展平数据如果想保持按列的顺序,可以给它们传入 order 参数值为 K (默认为 C,C 风格,以行为主),即:
df.values.ravel('K')
df.values.flatten('K') # 同上效果
'''
array(['Bob', 'Joe', 'Bill', 'Mary', 'Joe', 'Joe', 'Steve', 'Bob', 'Bob',
'Steve'], dtype=object)
'''
最后用 pd.unique()
来去重数据:
pd.unique(df.values.ravel('K'))
pd.unique(df.values.flatten('K')) # 同上效果
# array(['Bob', 'Joe', 'Bill', 'Mary', 'Steve'], dtype=object)
这样就实现了需求。
更新时间:Aug. 18, 2024, 4:17 p.m. 标签:pandas python numpy 重复