Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在数据帧中将十进制128转换为十进制_Python_Pandas_Numpy - Fatal编程技术网

Python 如何在数据帧中将十进制128转换为十进制

Python 如何在数据帧中将十进制128转换为十进制,python,pandas,numpy,Python,Pandas,Numpy,我有一个包含许多(但不是全部)小数128列的数据帧(取自mongodb集合)。我无法对它们进行任何计算或比较(例如,投射完整的数据帧) df = df.astype(str).astype(float) 对于单列。IDs是列的名称 df["IDs"] = df.IDs.astype(str).astype(float) 测试实现 from pprint import pprint import bson df = pd.DataFrame() y = [] for i in range(1,

我有一个包含许多(但不是全部)小数128列的数据帧(取自mongodb集合)。我无法对它们进行任何计算或比较(例如,投射完整的数据帧)

df = df.astype(str).astype(float)
对于单列。IDs是列的名称

df["IDs"] = df.IDs.astype(str).astype(float)
测试实现

from pprint import pprint
import bson
df = pd.DataFrame()
y = []
for i in range(1,6):
    i = i *2/3.5
    y.append(bson.decimal128.Decimal128(str(i)))
pprint(y)
df["D128"] = y
df["D128"] = df.D128.astype(str).astype(float)
print("\n", df)
输出:

[Decimal128('0.5714285714285714'),
 Decimal128('1.1428571428571428'),
 Decimal128('1.7142857142857142'),
 Decimal128('2.2857142857142856'),
 Decimal128('2.857142857142857')]

        D128
0  0.571429
1  1.142857
2  1.714286
3  2.285714
4  2.857143

铸造完整的数据帧

df = df.astype(str).astype(float)
对于单列。IDs是列的名称

df["IDs"] = df.IDs.astype(str).astype(float)
测试实现

from pprint import pprint
import bson
df = pd.DataFrame()
y = []
for i in range(1,6):
    i = i *2/3.5
    y.append(bson.decimal128.Decimal128(str(i)))
pprint(y)
df["D128"] = y
df["D128"] = df.D128.astype(str).astype(float)
print("\n", df)
输出:

[Decimal128('0.5714285714285714'),
 Decimal128('1.1428571428571428'),
 Decimal128('1.7142857142857142'),
 Decimal128('2.2857142857142856'),
 Decimal128('2.857142857142857')]

        D128
0  0.571429
1  1.142857
2  1.714286
3  2.285714
4  2.857143
只需使用:

df = df.astype(float)
您也可以使用or(应用元素操作),尽管与前面的方法相比,这些操作效率低下

df = df.applymap(float)
我无法在我的系统中复制128位小数。请你检查下一行是否适合你

df =  df.apply(lambda x: x.astype(float) if isinstance(x, bson.decimal.Decimal128) else x)
它将检查列的类型是否为十进制128,然后将其转换为浮点。

只需使用:

df = df.astype(float)
您也可以使用or(应用元素操作),尽管与前面的方法相比,这些操作效率低下

df = df.applymap(float)
我无法在我的系统中复制128位小数。请你检查下一行是否适合你

df =  df.apply(lambda x: x.astype(float) if isinstance(x, bson.decimal.Decimal128) else x)


它将检查一列是否为十进制128类型,然后将其转换为浮点。

您可以仅对十进制128列执行此操作吗?例如,foreach column如果是十进制128,则进行转换,否则请别管它?Hi@Rich我已编辑了我的答案。您能看一下并告诉我它是否适用于您吗?您可以仅对十进制128列执行此操作吗?例如。g、 foreach column if decimal128然后转换,否则别管它了?嗨@Rich我已经编辑了我的答案。你能看一下并告诉我它是否适合你吗?给出“TypeError:float()参数必须是字符串或数字,而不是‘decimal128’”@Rich更新了答案。你能现在检查一下并让我知道它是否有效吗穿线似乎很管用。看起来效率不高,但hey hoGives“TypeError:float()参数必须是字符串或数字,而不是‘Decimal128’”@Rich更新了答案。请您现在检查一下,并告诉我是否有效。:)穿线似乎很管用。看起来效率不高,但我认为isinstance方法返回false,因此列没有转换为float。我想如果你使用Decimal128的确切类,这个方法会起作用。它们都是“object”的实例,而不是str或Decimal128。你能展示一下你的数据帧的外观吗?看起来大多数都是正确的,除了字符串作为dtype object出现之外。我想我必须逐列执行,而不是自动执行。感谢您的帮助,我认为isinstance方法返回false,因此列没有转换为float。我想如果你使用Decimal128的确切类,这个方法会起作用。它们都是“object”的实例,而不是str或Decimal128。你能展示一下你的数据帧的外观吗?看起来大多数都是正确的,除了字符串作为dtype object出现之外。我想我必须逐列执行,而不是自动执行。谢谢你的帮助