>  기사  >  백엔드 개발  >  Python 데이터 정리 데이터 병합, 변환, 필터링, 정렬

Python 데이터 정리 데이터 병합, 변환, 필터링, 정렬

高洛峰
高洛峰원래의
2017-02-13 13:34:561629검색

앞서 몇 가지 기본 작업을 수행하기 위해 pandas를 사용했습니다. 다음으로 데이터 작업에 대해 자세히 알아봅니다.

데이터 정리는 항상 데이터 분석에서 매우 중요한 부분이었습니다.

데이터 병합

Pandas에서는 병합을 통해 데이터를 병합할 수 있습니다.

import numpy as np
import pandas as pd
data1 = pd.DataFrame({'level':['a','b','c','d'],
         'numeber':[1,3,5,7]})

data2=pd.DataFrame({'level':['a','b','c','e'],
         'numeber':[2,3,6,10]})
print(data1)

결과는 다음과 같습니다.

python 数据清洗之数据合并、转换、过滤、排序

print(data2)

결과는

python 数据清洗之数据合并、转换、过滤、排序

print(pd.merge(data1,data2))

결과는

python 数据清洗之数据合并、转换、过滤、排序

data1과 data2에서 동일한 레이블에 사용된 필드가 표시되고 다른 필드는 삭제되는 것을 볼 수 있는데, 이는 SQL의 내부 조인 연결 연산과 동일합니다.
그 외에도 How라는 키워드로 표현되는 Outer, Ringt, Left 등의 연결 방식이 있습니다.

data3 = pd.DataFrame({'level1':['a','b','c','d'],
         'numeber1':[1,3,5,7]})
data4=pd.DataFrame({'level2':['a','b','c','e'],
         'numeber2':[2,3,6,10]})
print(pd.merge(data3,data4,left_on='level1',right_on='level2'))

결과는 다음과 같습니다.

python 数据清洗之数据合并、转换、过滤、排序

두 데이터 프레임 모두에 열이 있는 경우 이름이 다른 경우 letf_on 및 right_on 두 매개변수를 지정하여 데이터를 함께 연결할 수 있습니다.

print(pd.merge(data3,data4,left_on='level1',right_on='level2',how='left'))

결과는 다음과 같습니다.

python 数据清洗之数据合并、转换、过滤、排序

기타 상세 매개변수 설명

python 数据清洗之数据合并、转换、过滤、排序

겹치는 데이터 병합

가끔 우리는 병합해야 하는 데이터가 겹치는 경우에는comebine_first 함수를 사용할 수 있습니다.

data3 = pd.DataFrame({'level':['a','b','c','d'],
         'numeber1':[1,3,5,np.nan]})
 data4=pd.DataFrame({'level':['a','b','c','e'],
         'numeber2':[2,np.nan,6,10]})
 print(data3.combine_first(data4))

결과는 다음과 같습니다.

python 数据清洗之数据合并、转换、过滤、排序

동일한 태그를 볼 수 있습니다. data3의 내용이 먼저 표시됩니다. 데이터 프레임의 특정 데이터가 누락되면 다른 데이터 프레임의 요소가 채워집니다.

여기서 사용법은 np.where(isnull)와 유사합니다. (a),b,a)

데이터 재구성 및 축 회전

이 내용은 이전 Pandas 기사에서 언급했습니다. 데이터 재구성은 reshape 함수를 주로 사용하고, 회전은 unstack, stack 함수를 주로 사용합니다.

data=pd.DataFrame(np.arange(12).reshape(3,4),
       columns=['a','b','c','d'],
       index=['wang','li','zhang'])
print(data)

결과는 다음과 같습니다.

python 数据清洗之数据合并、转换、过滤、排序

print(data.unstack())

결과는 다음과 같습니다.

python 数据清洗之数据合并、转换、过滤、排序

데이터 변환

중복 데이터 행 제거

data=pd.DataFrame({'a':[1,3,3,4],
       'b':[1,3,3,5]})
print(data)

결과는 다음과 같습니다.

python 数据清洗之数据合并、转换、过滤、排序

print(data.duplicated())

The 결과는

python 数据清洗之数据合并、转换、过滤、排序

세 번째 행이 두 번째 행의 데이터를 반복하는 것을 볼 수 있으므로 표시된 결과는 True입니다

另外用drop_duplicates方法可以去除重复行

print(data.drop_duplicates())

结果为:
python 数据清洗之数据合并、转换、过滤、排序

替换值

除了使用我们上一篇文章中提到的fillna的方法外,还可以用replace方法,而且更简单快捷

data=pd.DataFrame({'a':[1,3,3,4],
       'b':[1,3,3,5]})
print(data.replace(1,2))

结果为:

python 数据清洗之数据合并、转换、过滤、排序

多个数据一起换

print(data.replace([1,4],np.nan))

python 数据清洗之数据合并、转换、过滤、排序

数据分段


data=[11,15,18,20,25,26,27,24]
bins=[15,20,25]
print(data)
print(pd.cut(data,bins))

结果为:
[11, 15, 18, 20, 25, 26, 27, 24][NaN, NaN, (15, 20], (15, 20], (20, 25], NaN, NaN, (20, 25]]
Categories (2, object): [(15, 20] < (20, 25]]

可以看出分段后的结果,不在分段内的数据显示为na值,其他则显示数据所在的分段。

print(pd.cut(data,bins).labels)

结果为:

[-1 -1 0 0 1 -1 -1 1]

显示所在分段排序标签

print(pd.cut(data,bins).levels)

结果为:

Index([‘(15, 20]', ‘(20, 25]'], dtype='object')

显示所以分段标签

print(value_counts(pd.cut(data,bins)))

结果为:

python 数据清洗之数据合并、转换、过滤、排序

显示每个分段值得个数

此外还有一个qcut的函数可以对数据进行4分位切割,用法和cut类似。

排列和采样

我们知道排序的方法有好几个,比如sort,order,rank等函数都能对数据进行排序
现在要说的这个是对数据进行随机排序(permutation)

data=np.random.permutation(5)
print(data)

结果为:

[1 0 4 2 3]

这里的peemutation函数对0-4的数据进行随机排序的结果。
也可以对数据进行采样

df=pd.DataFrame(np.arange(12).reshape(4,3))
samp=np.random.permutation(3)
print(df)

结果为:

python 数据清洗之数据合并、转换、过滤、排序

print(samp)

结果为:
[1 0 2]

print(df.take(samp))

结果为:

python 数据清洗之数据合并、转换、过滤、排序

这里使用take的结果是,按照samp的顺序从df中提取样本。

更多python 数据清洗之数据合并、转换、过滤、排序相关文章请关注PHP中文网!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.