代码之家  ›  专栏  ›  技术社区  ›  Joseph Summerhays

如何将不同单位的字符串转换为相同的浮点值?

  •  0
  • Joseph Summerhays  · 技术社区  · 1 年前

    我有一个带有字符串的panda数据帧,但我想要浮点。不过琴弦上的单位是不同的。一列可能以毫米为单位,几个以厘米为单位。下一列可能是g,几个以公斤为单位,以此类推。

    如何将每个转换为相同单位的浮点值?(即,如果我将所有内容都更改为以毫米为单位的浮动,则“4.56厘米”应转换为45.6,而不是4.56)。

    1 回复  |  直到 1 年前
        1
  •  1
  •   Panda Kim    1 年前

    实例

    我们需要 minimal and reproducible example 回答。

    import pandas as pd
    import numpy as np
    
    data = {'length': ['4.56 cm', '100 mm', '3.5 cm', '10 mm'], 
            'weight': ['200 g', '0.5 kg', '300 g', '2 kg']}
    df = pd.DataFrame(data)
    

    df:

        length  weight
    0  4.56 cm   200 g
    1   100 mm  0.5 kg
    2   3.5 cm   300 g
    3    10 mm    2 kg
    

    密码

    我已经准备了一个答案和一个例子,但如果你的情况不同,请创建并提供你自己的清晰例子。

    s1 = df['length'].str.replace('[A-Za-z]', '', regex=True).astype('float')
    df['length(mm)'] = np.where(df['length'].str.contains('cm'), s1 * 10, s1)
    
    s2 = df['weight'].str.replace('[A-Za-z]', '', regex=True).astype('float')
    df['weight(g)'] = np.where(df['weight'].str.contains('kg'), s2 * 1000, s2)
    

    df:

        length  weight  length(mm)  weight(g)
    0  4.56 cm   200 g        45.6      200.0
    1   100 mm  0.5 kg       100.0      500.0
    2   3.5 cm   300 g        35.0      300.0
    3    10 mm    2 kg        10.0     2000.0