Python 对象数据类型为无法转换为整数的Dataframe列

Python 对象数据类型为无法转换为整数的Dataframe列,python,python-3.x,pandas,Python,Python 3.x,Pandas,我的数据框中有以下值,列数据类型为“object” 如何删除小数(.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,那么

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

如何删除小数(.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,但实际输出是1 因为str.strip('.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
只需使用单词boundary ie
\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

请格式化您的代码。请将帮助设置为自助。在你的列上做一个循环,试着把它们一个一个地转换成int。我敢肯定,一旦你知道它真正的位置,你就可以清楚地知道如何克服它。这是因为int没有NaN值。这与你可以忍受将NaN替换为float的痛苦,然后将
Calc\u id
转换成int这是一种方式,这里可能吗?类似于什么?抱歉,我没有完成问题,如果我的值为:1000.02000.03000.0执行str.strip('.0')将返回我1,2,3。但我需要100020003000查看我更新的答案,然后替换是更好的方式,而不是strip()。如果答案有帮助,那么您可以升级投票并接受答案。表示TypeError:replace()得到了意外的关键字参数“regex”
>>> 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