pandas将浮点数转换为不带小数的字符串

时间:2016-07-22 00:18:15

标签: python pandas

我有一个数据框

df = pd.DataFrame([
        ['2', '3', 'nan'],
        ['0', '1', '4'],
        ['5', 'nan', '7']
    ])

print df

   0    1    2
0  2    3  nan
1  0    1    4
2  5  nan    7

我想将这些字符串转换为数字并对列求和并转换回字符串。

使用astype(float)似乎让我到了数字部分。然后使用sum()进行求和很容易。然后使用astype(str)

返回字符串应该也很容易
df.astype(float).sum().astype(str)

0     7.0
1     4.0
2    11.0
dtype: object

这几乎就是我想要的。我想要整数的字符串版本。但浮点数有小数。我如何摆脱它们?

我想要这个

0     7
1     4
2    11
dtype: object

4 个答案:

答案 0 :(得分:19)

如果您的列包含空值,则转换为int(即使用.astype(int).astype(str))将不起作用;使用字符串格式来明确指定字符串列的格式通常是个更好的主意; (您可以在pd.options)中设置:

>>> pd.options.display.float_format = '{:,.0f}'.format
>>> df.astype(float).sum()
0     7
1     4
2    11
dtype: float64

答案 1 :(得分:16)

在混音中添加astype(int)

df.astype(float).sum().astype(int).astype(str)

0     7
1     4
2    11
dtype: object

使用空单元格演示示例。这不是OP的要求,而是满足批评者的要求

df = pd.DataFrame([
        ['2', '3', 'nan', None],
        [None, None, None, None],
        ['0', '1', '4', None],
        ['5', 'nan', '7', None]
    ])

df

      0     1     2     3
0     2     3   nan  None
1  None  None  None  None
2     0     1     4  None
3     5   nan     7  None

然后

df.astype(float).sum().astype(int).astype(str)

0     7
1     4
2    11
3     0
dtype: object

因为OP没有指明当列全部缺失时他们想要发生什么,所以提出零是一个合理的选择。

但是,我们也可以删除这些列

df.dropna(1, 'all').astype(float).sum().astype(int).astype(str)

0     7
1     4
2    11
dtype: object

答案 2 :(得分:7)

对于熊猫> = 1.0:

<NA> type was introduced for 'Int64'。您现在可以执行以下操作:

System.DateTime

它将正确地将df['your_column'].astype('Int64').astype('str') 转换为1.0


替代:

如果您不想更改所有熊猫的显示选项,@ maxymoo解决方案可以,则可以使用1

apply

答案 3 :(得分:1)

在转换为字符串之前添加astype(int)

print (df.astype(float).sum().astype(int).astype(str))

生成所需的结果。