2024-05-08 04:38:09 发布
网友
在我的熊猫中,数据是这样的:
(原始数据类似于2.1, 3.7, 5.6,后面没有0。)
2.1, 3.7, 5.6
我想看看小数部分第一位数的分布。(即6 for 4.6)。我该怎么做?在
6 for 4.6
我考虑过15.1 % 1,但它返回0.09999999999999964。在
15.1 % 1
0.09999999999999964
你可以试试:
int(str(x).split('.')[1][0])
这将转换为一个字符串,在上拆分。取第二部分的第一个字符,然后把它变成一个整数。得到奇怪值的原因是0.1在二进制中是一个无理数。在
您还可以使用:
这将确保您有一个整数(您可能还需要使用math.round)。在
math.round
例如:
>>> pf = pandas.DataFrame([0.5, 4.6, 7.2, 9.8, 36.0]) >>> pf 0 0 0.5 1 4.6 2 7.2 3 9.8 4 36.0 >>> pf[0] 0 0.5 1 4.6 2 7.2 3 9.8 4 36.0 Name: 0, dtype: float64 >>> pf.apply(lambda x: int(x[0]*10.0)%10) 0 5 dtype: int64 >>> pf.apply(lambda x: int(x[0]*10.0)%10, 1) 0 5 1 6 2 2 3 8 4 0 dtype: int64 >>>
关于-ve编号的测试:
>>> pf = pandas.DataFrame([0.5, 4.6, 7.2, -9.8, 36.0]) >>> df = pf.apply(lambda x: int(x[0]*10.0)%10, 1) >>> df 0 5 1 6 2 2 3 2 4 0 dtype: int64 >>> df = pf.apply(lambda x: int(abs(x[0])*10.0)%10, 1) >>> df 0 5 1 6 2 2 3 8 4 0 dtype: int64 >>>
所以我们的最终答案是:
pf.apply(lambda x: int(abs(x[0])*10.0)%10, 1)
我还尝试了字符串方法:
>>> pf.apply(lambda x:int(str(x[0]).split('.')[1][0]), 1) 0 5 1 6 2 2 3 8 4 0 dtype: int64
对于正数,可以先用乘法,然后用模。在
x = 15.6 x *= 10 # 156 x %= 10 # 6
如果是阴性
一个比poke建议的干净得多的方法。在
abs(x * 10) % 10
如果您有一个名为df的数据帧,可以这样括起来:
df.apply( lambda x: abs(x * 10) % 10 )
你可以试试:
这将转换为一个字符串,在上拆分。取第二部分的第一个字符,然后把它变成一个整数。得到奇怪值的原因是0.1在二进制中是一个无理数。在
您还可以使用:
^{pr2}$这将确保您有一个整数(您可能还需要使用
math.round
)。在例如:
关于-ve编号的测试:
所以我们的最终答案是:
我还尝试了字符串方法:
对于正数,可以先用乘法,然后用模。在
如果是阴性
^{pr2}$一个比poke建议的干净得多的方法。在
如果您有一个名为df的数据帧,可以这样括起来:
相关问题 更多 >
编程相关推荐