我有一个数据框
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
答案 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)
<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))
生成所需的结果。