具有对象数据类型的数据框列无法转换为整数

时间:2019-01-11 18:52:27

标签: python python-3.x pandas

我的数据框中有以下值,列数据类型为“对象”

df['Calc_id']

2345.0
4545.0
1234.0
NaN
Nan
1000.0

如何删除小数点(.0)?

我首先尝试的是:

df['Calc_id'].astype(int)

错误:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

另一项审判:

df['Calc_id'].str.strip('.0')

这会删除末尾的小数,但会删除所有尾随零,例如下面的示例

如果我们的值为1000,那么它将转换为1

我该如何解决?

我希望1000.0的结果是1000,但是eh的实际输出是1 由于str.strip('。0')

我该如何解决?

1 个答案:

答案 0 :(得分:0)

一种替换Nan或填充Nan然后转换为int obj的解决方案:

>>> df['Calc_id'].replace(np.nan, 0.0).astype(int)
0    2345
1    4545
2    1234
3       0
4       0
Name: Calc_id, dtype: int64

或者您可以先使用fillna方法进行转换,然后再转换为零以获得int obj:

>>> df['Calc_id'].fillna(0).astype(int)
0    2345
1    4545
2    1234
3       0
4       0
Name: Calc_id, dtype: int64

您的解决方案是:

正如我所见,您的意图只是删除结尾的.0,然后在下面执行此操作。

编辑:

>>> df
   Calc_id
0   2345.0
1   4545.0
2   1234.0
3   1000.0
4   2000.0
5   3000.0
6      NaN
7      NaN

只需使用边界\b.0\b一词来精确替换即可。

>>> df['Calc_id'].replace(r'(\b.0\b)', '', regex=True)
0    2345
1    4545
2    1234
3    1000
4    2000
5    3000
6     nan
7     nan
Name: Calc_id, dtype: object