>백엔드 개발 >파이썬 튜토리얼 >Python 데이터 정리 시리즈의 문자열 처리에 대한 자세한 설명

Python 데이터 정리 시리즈의 문자열 처리에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-02-13 13:32:122348검색

서문

데이터 클리닝은 복잡하고 지루한(쿠비) 작업이자 전체 데이터 분석 과정에서 가장 중요한 연결고리이기도 합니다. 어떤 사람들은 분석 프로젝트 시간의 80%가 데이터를 정리하는 데 사용된다고 말합니다. 이상하게 들리지만 실제 작업에서는 그렇습니다. 데이터 정리에는 두 가지 목적이 있습니다. 첫 번째는 정리를 통해 데이터를 사용할 수 있도록 하는 것입니다. 두 번째는 데이터를 후속 분석에 더 적합하게 만드는 것입니다. 즉, 세척해야 할 "더티" 데이터와 세척해야 할 클린 데이터도 있습니다.

데이터 분석, 특히 텍스트 분석에서 문자 처리에는 많은 에너지가 필요하므로 문자 처리에 대한 이해도 데이터 분석에 있어서 매우 중요한 능력입니다.

문자열 처리 방법

우선 기본 방법이 무엇인지 알아보겠습니다.

Python 데이터 정리 시리즈의 문자열 처리에 대한 자세한 설명

먼저 모두 이해하자 다음 문자열 분할 방법

str='i like apple,i like bananer'
print(str.split(','))

문자 str을 쉼표로 분할한 결과:

['i like apple', 'i like bananer']

print(str.split(' '))

공백 기준으로 분할한 결과:

['i' , 'like', 'apple,i', 'like', 'bananer']

print(str.index(','))
print(str.find(','))

두 검색결과는 다음과 같습니다.

12

인덱스를 찾을 수 없으면 인덱스는 오류를 반환하고 find는 -1을 반환합니다.

print(str.count('i'))

The 결과는 다음과 같습니다.

4

connt는 대상 문자열의 빈도를 계산하는 데 사용됩니다.

print(str.replace(',', ' ').split(' '))

결과는 다음과 같습니다.

['i', 'like', 'apple', 'i', 'like', 'bananer']

여기 교체는 쉼표를 공백으로 대체하고 공백을 사용하여 문자열을 분할합니다. 각 단어를 제거하기에 충분합니다.

기존 방법 외에 가장 강력한 문자 처리 도구는 정규식입니다.

정규식

정규식을 사용하기 전에 정규식의 다양한 메소드를 이해해야 합니다.

Python 데이터 정리 시리즈의 문자열 처리에 대한 자세한 설명

다음 방법의 사용법을 먼저 살펴보겠습니다. 먼저 일치 방법과 검색 방법의 차이점을 이해하세요.

str = "Cats are smarter than dogs"
pattern=re.compile(r'(.*) are (.*?) .*')
result=re.match(pattern,str)

for i in range(len(result.groups())+1):
 print(result.group(i))

결과는 다음과 같습니다.

고양이가 개보다 똑똑합니다
고양이
더 똑똑합니다

이런 형태의 pettern 매칭 규칙에 따르면, 일치 및 검색 방법 반환 결과는 동일

이때 패턴을

pattern=re.compile(r'are (.*?) .*')

로 변경하면 일치합니다. 아무것도 반환하지 않으면 검색 결과가 반환됩니다.

개보다 똑똑합니다
똑똑합니다

다음으로 다른 방법의 사용에 대해 알아 보겠습니다.

str = "138-9592-5592 # number"
pattern=re.compile(r'#.*$')
number=re.sub(pattern,'',str)
print(number)

결과는

138-9592-5592

위는 숫자를 추출한 것입니다. # 기호 뒤의 내용을 아무것도 없는 것으로 바꿉니다.

숫자의 크로스바를 추가로 교체할 수 있습니다

print(re.sub(r'-*','',number))

결과는 다음과 같습니다.

13895925592

발견된 문자열을 인쇄하기 위해 find 메소드를 사용할 수도 있습니다

str = "138-9592-5592 # number"
pattern=re.compile(r'5')
print(pattern.findall(str))

결과는 다음과 같습니다.

['5', '5', '5']

정규식의 전체적인 내용은 상대적으로 방대하며 문자열 일치 규칙에 대한 충분한 이해가 필요합니다. 다음은 특정 일치 규칙입니다.

Python 데이터 정리 시리즈의 문자열 처리에 대한 자세한 설명

벡터화된 문자열 함수

분석할 흩어져 있는 데이터를 정리할 때 문자열 정규화 작업이 필요한 경우가 많습니다. .

data = pd.Series({'li': '120@qq.com','wang':'5632@qq.com',
 'chen': '8622@xinlang.com','zhao':np.nan,'sun':'5243@gmail.com'})
print(data)

결과는 다음과 같습니다.

Python 데이터 정리 시리즈의 문자열 처리에 대한 자세한 설명

몇 가지 방법을 통해 데이터에 대한 예비 판단을 내릴 수 있습니다. 규제 및 통합의 경우, 포함을 사용하여 각 데이터에

print(data.str.contains('@'))

키워드가 포함되어 있는지 확인합니다. 결과는

Python 데이터 정리 시리즈의 문자열 처리에 대한 자세한 설명입니다.

문자열을 분할하여 필요한 문자열을 추출할 수도 있습니다.

data = pd.Series({'li': '120@qq.com','wang':'5632@qq.com',
     'chen': '8622@xinlang.com','zhao':np.nan,'sun':'5243@gmail.com'})
pattern=re.compile(r'(\d*)@([a-z]+)\.([a-z]{2,4})')
result=data.str.match(pattern) #这里用fillall的方法也可以result=data.str.findall(pattern)
print(result)

结果为:

chen [(8622, xinlang, com)]
li [(120, qq, com)]
sun [(5243, gmail, com)]
wang [(5632, qq, com)]
zhao NaN
dtype: object

此时加入我们需要提取邮箱前面的名称

print(result.str.get(0))

结果为:

Python 데이터 정리 시리즈의 문자열 처리에 대한 자세한 설명

或者需要邮箱所属的域名

print(result.str.get(1))

结果为:

Python 데이터 정리 시리즈의 문자열 처리에 대한 자세한 설명

当然也可以用切片的方式进行提取,不过提取的数据准确性不高

data = pd.Series({'li': '120@qq.com','wang':'5632@qq.com',
    'chen': '8622@xinlang.com','zhao':np.nan,'sun':'5243@gmail.com'})
print(data.str[:6])

结果为:

Python 데이터 정리 시리즈의 문자열 처리에 대한 자세한 설명

最后我们了解下矢量化的字符串方法

Python 데이터 정리 시리즈의 문자열 처리에 대한 자세한 설명

更多Python 데이터 정리 시리즈의 문자열 처리에 대한 자세한 설명相关文章请关注PHP中文网!

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