将字串转换为舍入清单

时间:2019-03-14 13:27:29

标签: python pandas

我正在尝试将列从字符串转换为浮点型。 df列如下所示。有些行中没有数字,但有一个空格''。

    col
'1.1, 1.0006'
    '  '

我正在尝试将每个数字四舍五入到小数点后三位。输出看起来像这样。

    col
'1.100, 1.001'
    '  '

我的想法:

df['col'] = df['col'].astype(float)
df['col'] = df['col'].round(3)

3 个答案:

答案 0 :(得分:2)

我认为您需要:

df = pd.DataFrame({'col':["'1.1, 1.0006'", "'   '"]})
print (df)

def func(x):
    out = []
    #split and strip values, try convert each value to float, if error, get original value
    for y in x.strip("'").split(', '):
        try:
            out.append(round(float(y), 3))
        except:
            out.append(y)

    return (out)

df['new'] = df['col'].apply(func)
print (df)
             col           new
0  '1.1, 1.0006'  [1.1, 1.001]
1          '   '         [   ]

如果需要浮点数的字符串,请使用f-strings

def func(x):
    out = []
    for y in x.strip("'").split(', '):
        try:
            out.append(f'{round(float(y), 3):.3f}')
        except:
            out.append(y)

    return (out)

df['new'] = df['col'].apply(func)
print (df)

             col             new
0  '1.1, 1.0006'  [1.100, 1.001]
1          '   '           [   ]

对于字符串,在末尾添加join

def func(x):
    out = []
    for y in x.strip("'").split(', '):
        try:
            out.append(f'{round(float(y), 3):.3f}')
        except:
            out.append(y)

    return (', '.join(out))

df['new'] = df['col'].apply(func)
print (df)
             col           new
0  '1.1, 1.0006'  1.100, 1.001
1          '   '              

答案 1 :(得分:1)

您可以尝试以下方法:

df['col'] = df['col'].apply(lambda x: x.split(', '))
def string_to_float(list):
    x = []
    for each in list:
        x.append(round(float(each), 3))
    return x
df['col'] = df['col'].apply(lambda x: string_to_float(x))

更新: 以下代码现在可以正常运行:

df['col'] = df['col'].apply(lambda x: x.replace("'", "").replace(" ", "").split(','))
def string_to_float(list):
    x = []
    for each in list:
        if each != '':
            x.append((str(round(float(each), 3))))
    return ','.join(x)
df['col'] = df['col'].apply(lambda x: string_to_float(x))

答案 2 :(得分:1)

尝试:

def fix_string(string):
    numbers = pd.to_numeric(string.split(','), errors='coerce').round(3)
    return numbers

df['col'] = df['col'].apply(fix_string)