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你太可爱了,太体贴了。