변환하는 방법으로 열체 dtype 에 떠 pandas 데이터 프레임?

0

질문

가 데이터 프레임으로 열 이름이'높이'나는 원하는 변환하는 값으로 떠. 기본 유닛은 미터이지만,그것은 몇 가지에서 값이 잘못된 포맷에서,또는 인치입니다. 보

        height
0          16
1           7
2           7
3         6 m
4        2.40
5        5'8"
6          3m
7         6,9
8       9;6;3
9     Unknown
10       4.66
11 Bilinmiyor
12     11' 4"

dtype: object

기본적으로,필요해 값을 변환하는 인치/피트 미터 장치,변환 같은 값 BilinmiyorUnknown 하기 NaN을 제거 장치 같은 사양 m m대체에 쉼표수 번호 .고,가장 큰 숫자를 위한 가치 9;6;3. 최종 dtypes 해야 떠나 int.

나는 새로운 사항을 지원하기 위해서 사용하는 방법을 알고있는 고급 기술 지금까지. 내가 달성하기 위해 노력하고 사용하여 작업

def to_num(a):
    try:
        return float(pd.to_numeric(a, errors = 'raise'))
    except ValueError:
        return a

df['height'] = to_num(df['height'])

하지만 그것은 작동하지 않았다. 을 사용해야 한다 반복지만 그것은 매우 복잡한 반복을 통해 모든 세포에 열기 때문에,데이터 집합을 2 개 이상의 백만의 행이 있습니다.

pandas python
2021-11-24 04:44:20
1

최고의 응답

0

나는 느낌을 메이트,나는 같은 종류의 문제입니다. 하지만 다행히도 이것은 어렵지 않아

import pandas as pd

df = pd.DataFrame({'height': [16, 7, '6m', '2.4', '3,5', 'Asdf', '9;6;3']})
df['height'] = df['height'].astype(str)  # force type str
df['height'] = df['height'].str.replace('.', ',', regex=False)  # . -> ,
df['height'] = df['height'].str.replace('[A-Za-z]', '')  # remove all characters (regex)
df['height'] = df['height'].str.split(';').apply(max)  # pick largest value from 9;6;3
df['height'] = pd.to_numeric(df['height'], errors='coerce')  # force float

당신

height
0   16.0
1   7.0
2   6.0
3   2.4
4   3.5
5   NaN
6   9.0

지금 당신을 변환하는 미터 피트(나는 가정하면 기본값은 미터)해야 합니다 추가 수준의 안색

import pandas as pd
import numpy as np
import re

def feet_to_m(s):
    if '\'' in s or "\"" in s:
        if '\'' in s:
            feet = float(s.split('\'')[0])
        else:
            feet = 0
        if '\"' in s:
            if '\'' in s:
                inch = float(s.split('\'')[1].split('\"')[0])
            else:
                inch = float(s.split('\"')[0])
        else:
            inch = 0
        return (feet*12 + inch) * 0.0254
    else:
        return s

df = pd.DataFrame({'height': [16, 7, '6m', '2.4', '3,5', 'Asdf', '9;6;3', "11' 4\"", "4'", "15\""]})
df['height'] = df['height'].astype(str)  # force type str
df['height'] = df['height'].str.replace(',', '.', regex=False)  # . -> ,
df['height'] = df['height'].str.replace('[A-Za-z]', '')  # remove all characters
df['height'] = df['height'].str.split(';').apply(max)  # pick largest value from 9;6;3
df['height'] = df['height'].apply(feet_to_m)
df['height'] = pd.to_numeric(df['height'], errors='coerce')  # force float

을 얻

height
0   16.0000
1   7.0000
2   6.0000
3   2.4000
4   3.5000
5   NaN
6   9.0000
7   3.4544
8   1.2192
9   0.3810

2021-11-24 06:02:07

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................