大佬教程收集整理的这篇文章主要介绍了python中的字符串浮点到int 使用 map() 进行四舍五入,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下数据框:
我想将这些 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@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@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,请注明来意。