从第一列开始选择小数(不取整)后的特定数字作为Pandas数据帧-Python



我只是想在从第1列(python index-0(开始的pandas数据帧中的数据的小数点后选择一定数量的数字(5位(,而不舍入

例如,我的熊猫看起来像这个

ids       value1     value2       value3       value4
ex12    0.1345656    0.1345656   0.1345656   0.1345656
ex13    0.1345656    0.1345656   0.1345656   0.1345656
ex14    0.1345656    0.1345656   0.1345656   0.1345656
ex15    0.1345656    0.1345656   0.1345656   0.1345656

我想把它转换成这个新的数据帧:

ids       value1     value2       value3       value4
ex12    0.13456    0.13456   0.13456   0.13456
ex13    0.13456    0.13456   0.13456  0.13456
ex14    0.13456    0.13456   0.13456   0.13456
ex15    0.13456   0.13456   0.13456   0.13456

因此,转换不应该触及第一列(id(,并且效果应该只在下一列之后发生。

以下是我在Python中的代码尝试:

import pandas as pd
data = [['ex12', 0.1345656, 0.1345656, 0.1345656 , 0.1345656], 
['ex13', 0.1345656, 0.1345656, 0.1345656 , 0.1345656],
['ex14', 0.1345656, 0.1345656, 0.1345656 , 0.1345656],
['ex15', 0.1345656, 0.1345656, 0.1345656 , 0.1345656]
]
df
ids   values1    value2    value3    value4
0  ex12  0.134566  0.134566  0.134566  0.134566
1  ex13  0.134566  0.134566  0.134566  0.134566
2  ex14  0.134566  0.134566  0.134566  0.134566
3  ex15  0.134566  0.134566  0.134566  0.134566

当我将其转换为字符串数据类型时,它不起作用,这样我就可以将它们作为字符串进行处理(切片(。然而,当我这样做时,结果转换是按行而不是按列的,并且该操作对其余列也不执行相同的操作。有办法在熊猫身上做到这一点吗?

df.apply(str).apply(lambda x: x[:12])
ids        0    ex12n1 
values1     0    0.13456
value2      0    0.13456
value3      0    0.13456
value4      0    0.13456
dtype: object

事先非常感谢。

对于一列,您可以尝试此

(df.value1 * 1e5).astype(int) / 1e5
Out[193]:
0    0.13456
1    0.13456
2    0.13456
3    0.13456
Name: value1, dtype: float64

对于所有列,您可以使用apply

df.iloc[:,1:].apply(lambda x: (x * 1e5).astype(int) / 1e5)
Out[197]:
value1   value2   value3   value4
0  0.13456  0.13456  0.13456  0.13456
1  0.13456  0.13456  0.13456  0.13456
2  0.13456  0.13456  0.13456  0.13456
3  0.13456  0.13456  0.13456  0.13456

放回您的数据帧。使用update

df.update(df.iloc[:,1:].apply(lambda x: (x * 1e5).astype(int) / 1e5))
print(df)
Output:
ids   value1   value2   value3   value4
0  ex12  0.13456  0.13456  0.13456  0.13456
1  ex13  0.13456  0.13456  0.13456  0.13456
2  ex14  0.13456  0.13456  0.13456  0.13456
3  ex15  0.13456  0.13456  0.13456  0.13456

如果要创建新的数据帧,请使用join

df_new = df.iloc[:,[0]].join(df.iloc[:,1:]
.apply(lambda x: (x * 1e5).astype(int) / 1e5))
Out[210]:
ids  values1   value2   value3   value4
0  ex12  0.13456  0.13456  0.13456  0.13456
1  ex13  0.13456  0.13456  0.13456  0.13456
2  ex14  0.13456  0.13456  0.13456  0.13456
3  ex15  0.13456  0.13456  0.13456  0.13456

最新更新