程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了python中的字符串浮点到int 使用 map() 进行四舍五入大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决python中的字符串浮点到int 使用 map() 进行四舍五入?

开发过程中遇到python中的字符串浮点到int 使用 map() 进行四舍五入的问题如何解决?下面主要结合日常开发的经验,给出你关于python中的字符串浮点到int 使用 map() 进行四舍五入的解决方法建议,希望对你解决python中的字符串浮点到int 使用 map() 进行四舍五入有所启发或帮助;

我有以下数据框:

数据
A(1.2,2)
B(1,5)
A(5.8,9)
B(8.9,0.9)

我想将这些 float (str) 对象转换为 int。我该怎么做?

期望的输出:

数据
A(1,5)
A(6,9)
B(9,1)

到目前为止我尝试了什么?

@H_801_59@pd.to_numeric(df['data'])

但我收到以下错误:@H_801_59@ValueError: Unable to parse String "A(1,2)" at position 0 我该如何解决这个问题?

解决方法

您的字符串实际上是 namedtuples。就这样对待他们

  • 定义预期的命名元组
  • 使用 @H_801_59@pd.eval() 转换为命名元组
  • 使用 f-String 返回想要的字符串表示
  • 或者使用 Series map() 更改为想要的表示
@H_801_59@df = pd.read_csv(
    io.StringIO(
        """df
A(1.2,2)
B(1,5)
A(5.8,9)
B(8.9,0.9)"""
    ),sep="\t",).rename(columns={"df": "data"})


from collections import namedtuple

A = namedtuple("A","x y")
B = namedtuple("B","x y")
df = pd.DataFrame(
    {
        "data": [
            f"{type(nt).__name__}({round(nt.x,0):.0f},{round(nt.y):.0f})"
            for nt in pd.eval(df["data"])
        ]
    }
)

使用 @H_801_59@map() 进行四舍五入

@H_801_59@df["data"] = pd.Series(pd.eval(df["data"])).map(
    lambda nt: str(nt._replace(x=int(round(nt.x,0)),y=int(round(nt.y,0))))
)
数据
0 A(1,2)
1 B(1,5)
2 A(6,9)
3 B(9,1)
,

您有一个字符串,首先需要将数字彼此分开,自定义函数可能是最简单的方法:

@H_801_59@def round_String(s):
    start = s.index('(') +1
    stop = s.index(')')
    l = s[start:stop].split(',')
    lst = [str(int(round(float(i)))) for i in l]
    return s[:start] + ','.join(lst) + s[stop:]

s = "B(8.9,0.9)"
round_String(s)
# 'B(9,1)'
@H_675_137@

将函数映射到数据框:

@H_801_59@df['data'].map(round_String)
,

如果你不需要四舍五入,下面应该工作,用空字符串替换小数点和小数点后的数字

@H_801_59@df['data'].str.replace('\.\d+','',regex=TruE)
0     A(1,2)
1     B(1,5)
2    A(5,9)
3     B(8,0)
Name: col,dtype: object

为了舍入值,需要更多的努力,只需使用 @H_801_59@extract @H_801_59@regex 括号部分并将其分配给临时列,然后使用理解来舍入调用 {{1} 的每个值}} 最后用给定列中的新值替换。

@H_801_59@eval
,

所以你想要做的是将嵌套在字符串中的浮点数转换为整数。

此外,您的输出表明您不想使用 int 函数,但可能使用 @H_801_59@round(x,0)(我这么说是因为 @H_801_59@int(5.8) 的计算结果为 @H_801_59@5,而不是 6。

因此,应用于数据框的这样的函数将起作用:

@H_801_59@def convert_fn_strs(fn):
    val_list = re.split('[(,)]',fn)
    val_list.remove('')
    fn_name = val_list.pop(0)
    val_list = [round(float(X)) for i,x in enumerate(val_list)]
    return fn_name + str(tuple(val_list))```


大佬总结

以上是大佬教程为你收集整理的python中的字符串浮点到int 使用 map() 进行四舍五入全部内容,希望文章能够帮你解决python中的字符串浮点到int 使用 map() 进行四舍五入所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。