วิธีที่จะแปลงเป็นคอลัมน์กับวัตถุ dtype ต้องลอยอยู่ใน pandas dataframe?

0

คำถาม

ฉันมี dataframe กับคอลัมน์ที่ชื่อ'ความสูงของ'และฉันต้องการจะแปลงค่าไปในโฟลทกัน ค่าปริยายหน่วยเป็นมิเตอร์แต่มันมีค่าในรูปแบบไม่ถูกต้อง,หรือนิ้ว มันดูเหมือนว่า

        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

ง่ายๆก็คือ,ผมต้องการจะแปลงค่าต่างๆในนิ้ว/ft ต้องมิเตอร์หน่วยแปลงค่าต่างๆอย่าง Bilinmiyor แล้ว Unknown ต้อง NaNราหน่วย specification เหมือน 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'])

แต่มันไม่ได้ผล ฉันสงสัยว่าถ้าฉันควรจะใช้ทำซ้ำแต่มันดูเหมือนเรื่องซับซ้อต้อง iterate ผ่านทุกเซลล์ในคอลัมน์นี้เพราะวันที่มีมากกว่า 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

ตอนนี้ถ้าคุณต้องการจะแปลงเท้าของคุณต้องเมตร(ฉันกำลังคิดว่าคุณจะได้ค่าปริยายคือมิเตอร์)คุณจะต้องเพิ่มระดับของ complexion

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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่