【发布时间】:2020-05-20 09:30:42
【问题描述】:
我想使用 .ftr 文件快速分析数百个表。不幸的是,我在使用小数和千位分隔符时遇到了一些问题,类似于 that post,只是 read_feather 不允许使用 decimal=',', thousands='.' 选项。我尝试了以下方法:
df['numberofx'] = (
df['numberofx']
.apply(lambda x: x.str.replace(".","", regex=True)
.str.replace(",",".", regex=True))
导致
AttributeError: 'str' object has no attribute 'str'
当我把它改成
df['numberofx'] = (
df['numberofx']
.apply(lambda x: x.replace(".","").replace(",","."))
我在结果中收到了一些奇怪的(四舍五入)错误,例如某些高于 1k 的数字是 22359999999999998 而不是 2236。 1k以下都是真实结果的10倍,这可能是因为删除了“。”浮点数并创建该数字的 int。
尝试
df['numberofx'] = df['numberofx'].str.replace('.', '', regex=True)
还会导致结果中出现一些奇怪的行为,因为一些数字在 10^12 中,而另一些则保持在 10^3 中。
Here is how I create my .ftr files from multiple Excel files。我知道我可以简单地从 Excel 文件创建 DataFrame,但这会大大降低我的日常计算速度。
我该如何解决这个问题?
编辑:问题似乎来自以 df 格式读取 excel 文件,该文件具有非美国标准的十进制和千位分隔符,而不是将其保存为羽毛。使用pd.read_excel(f, encoding='utf-8', decimal=',', thousands='.') 读取excel文件的选项解决了我的问题。这就引出了下一个问题:
为什么在羽毛文件中保存浮点数会导致奇怪的舍入错误,例如将 2.236 更改为 2.2359999999999998?
【问题讨论】:
-
只是为了清楚您想在
numberofx列上将1.000.000,10转换为1000000.10吗? -
该列中的所有值都应该是整数。不知何故,这些值被存储为浮点数。我认为这个问题是因为欧洲与美国的 dezimal 符号。因此,所有大于 1k 的数字都将转换为例如2.236。我想收到原始整数值
-
您确定数据框中的列包含
float而不是string类型?对 ?查看列类型执行该行 -->df.dtypes['numberofx'] -
你是对的,它存储为
object,包括小数点和千位分隔符。
标签: python pandas rounding decimal-point feather