我正在一个使用Excel工作表的网站上工作,将其转换为熊猫数据框,并通过一些计算和格式化将其发送回。因此,用户可以提供小数和数据帧:
decimals = 2
df = pd.DataFrame([["a", 1], ["b", 2.2]], columns=["name", "value"])
然后是一些任意的尾随零/路由位置,需要将结果发送回去:
name value
a 1.00
b 2.20
到目前为止,我做到了,直到我开始遇到类型问题:
if decimals:
pandas.options.display.float_format = f"{{:.{decimals}f}}".format
df = df.astype(float)
但是当然df["name"]
将无法转换:
ValueError: could not convert string to float: 'a'
如果我事先知道,我可以使用df.format()
,但是在这种情况下,他们可能会上传由字符串,浮点数或整数组成的任意矩阵。
答案 0 :(得分:1)
要么检查当前类型,然后仅转换所需的类型(任何数字类型还是仅浮点数?),或者就可以转换所有可转换的内容(更容易要求宽恕而不是获得许可):
for col in df.columns:
try:
df[col] = df[col].astype(float)
except ValueError:
pass