Python 如何获得小数部分的第一位数字?
在我的熊猫中,数据如下:Python 如何获得小数部分的第一位数字?,python,pandas,Python,Pandas,在我的熊猫中,数据如下: (原始数据类似于2.1、3.7、5.6,没有以下0。) 我想看看小数部分第一位数字的分布。(即,4.6版的6)。我怎么做 我考虑过15.1%1,但它返回0.09999999964。您可以尝试: int(str(x).split('.')[1][0]) 这将转换为字符串,拆分为。取第二部分的第一个字符,然后将其返回整数。得到这个奇怪值的原因是0.1是二进制中的无理数 您还可以使用: int(x * 10.0) % 10 这将确保您有一个整数(您可能还需要使用math
(原始数据类似于
2.1、3.7、5.6
,没有以下0。)
我想看看小数部分第一位数字的分布。(即,4.6版的6
)。我怎么做
我考虑过15.1%1
,但它返回0.09999999964
。您可以尝试:
int(str(x).split('.')[1][0])
这将转换为字符串,拆分为。取第二部分的第一个字符,然后将其返回整数。得到这个奇怪值的原因是0.1是二进制中的无理数
您还可以使用:
int(x * 10.0) % 10
这将确保您有一个整数(您可能还需要使用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
你可以试试:
int(str(x).split('.')[1][0])
这将转换为字符串,拆分为。取第二部分的第一个字符,然后将其返回整数。得到这个奇怪值的原因是0.1是二进制中的无理数
您还可以使用:
int(x * 10.0) % 10
这将确保您有一个整数(您可能还需要使用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
如果是负数,
def get(x):
return (x * 10) % 10
x = - 15.6
print get(abs(x))
就像poke建议的那样,这是一种更干净的方式
abs(x * 10) % 10
如果您有一个名为df的数据帧,可以这样封装:
df.apply( lambda x: abs(x * 10) % 10 )
对于正数,可以先使用乘法,然后使用模
x = 15.6
x *= 10 # 156
x %= 10 # 6
如果是负数,
def get(x):
return (x * 10) % 10
x = - 15.6
print get(abs(x))
就像poke建议的那样,这是一种更干净的方式
abs(x * 10) % 10
如果您有一个名为df的数据帧,可以这样封装:
df.apply( lambda x: abs(x * 10) % 10 )
我实际上不是python开发人员。如果你想添加任何细节,你可以编辑我的答案。非常感谢。
abs(x*10)%10
适用于正数和负数。我实际上不是python开发人员。如果你想添加任何细节,你可以编辑我的答案。非常感谢。abs(x*10)%10
适用于正数和负数。对于所有回答者:正如OP提到的熊猫,可能需要将其附在apply/lambda中。例如,df.apply(lambda x:您的代码)
。OP也应该更明确一些:df=pd.DataFrame([0.5,4.6,7.2])
@UmaKanth,这真是太令人印象深刻了……@JohnE你太可爱了,太体贴了。对于所有的回答者来说:正如OP提到的熊猫一样,最好用apply/lambda括起来。例如,df.apply(lambda x:您的代码)
。OP也应该更明确一些:df=pd.DataFrame([0.5,4.6,7.2])
@UmaKanth,这真是太令人印象深刻了……@JohnE你太可爱了,太体贴了。