首页 > 解决方案 > 如何在一个点后只打印一个字符?

问题描述

我有一个具有不同值的数据框。这些值是数字,但有时它们可​​以是字符串。我只想在点后显示一位小数。

我试过转换为字符串,但我不知道如何在点后取一个字符。

这是我的数据框(减少):

0   18.932202   19.063694   19.822535   22.3385
1   19.215377   19.424890   20.249221   22.3116
2   19.096696   19.361342   20.011814   21.2492
3   18.914138   19.016130   >30.0       22.3597
4   18.896591   19.051426   19.647521   20.982

带有'>'的数字是一个字符串,这就是我将所有内容都转换为字符串的原因。

预期的数据框:

0   18.9    19.0    19.8    22.3
1   19.2    19.4    20.2    22.3
2   19.0    19.3    20.0    21.2
3   18.9    19.0    >30.0   22.3
4   18.8    19.0    19.6    20.9

标签: pythondataframe

解决方案


使用astype()round()

这是一个有几种类型的样本

data = [[18.932202,19.063694,'19.822535',22.3385],
        [19.215377,19.424890 ,'20.249221',22.3116],
        [19.096696,19.361342,'20.011814',21.2492],
        [18.914138,'19.016130',9.734784 ,22.3597],
        [18.896591,19.051426,19.647521 ,20.982]]

df = pd.DataFrame(data, columns=['c1', 'c2', 'c3', 'c4'])
df.dtypes

输出 :

c1    float64
c2     object
c3     object
c4    float64
dtype: object

astype()首先,您需要在 float64 (带点的数字类型)上投射您的 Dataframe

df = df.astype('float64')
df.dtypes

输出 :

c1    float64
c2    float64
c3    float64
c4    float64
dtype: object

然后用于 round()减少点后的数字

df = df.round(1)
df

输出

    c1      c2      c3      c4
0   18.9    19.1    19.8    22.3
1   19.2    19.4    20.2    22.3
2   19.1    19.4    20.0    21.2
3   18.9    19.0    9.7     22.4
4   18.9    19.1    19.6    21.0

推荐阅读