Python 对象数据类型为无法转换为整数的Dataframe列
我的数据框中有以下值,列数据类型为“object” 如何删除小数(.0) 我首先尝试的是: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,那么
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