【发布时间】:2020-09-02 07:52:51
【问题描述】:
我在需要加入的数据框中有一列。该列包含混合数据类型,例如:
s = pd.Series([3985500,'3985500',3985500.0,'3985500.0','3985500A','3985500B'])
我正在尝试将所有数字转换为 int 以确保在加入时找到密钥。任何字符串都可以保留字符串,并且最终的列格式允许为字符串,只要将浮点数转换为int即可。
我尝试过astype(),但它忽略了浮点数,并且由于某种原因我不断获得科学记数法(参见索引 2 和 3):
s.astype(int, errors='ignore')
0 3985500
1 3985500
2 3.9855e+06
3 3985500.0
4 3985500A
5 3985500B
dtype: object
我让pd.to_numeric 使用try-except 处理花车:
try: int(pd.to_numeric(s[3]))
except ValueError: s[3]
3985500
dtype: int
但是,一旦我在函数中尝试它,它什么也不返回:
def convert_to_int(cell):
try: int(pd.to_numeric(cell))
except ValueError: cell
convert_to_int(s[3])
知道为什么会这样吗?可能还有其他解决方法,但为什么它在函数中不起作用?
我希望将此功能与s.apply() 一起使用。我看过几个类似的帖子:
【问题讨论】:
-
return int(pd.to_numeric(cell))。此外,您可以将downcast参数作为“整数”传递给to_numeric,避免使用int进行转换。 -
你在笔记本上运行这个吗?否则,您的裸 try-except 也不应该产生输出。
-
感谢@lightalchemist,返回的正是所缺少的。请参阅已接受的答案。但是,出于某种原因,使用 downcast 选项仍将索引 2 处的值作为浮点数返回。
-
@MisterMiyagi,是的,我在笔记本中运行它,这就是为什么它在裸露的
try-except中显示结果。
标签: python string type-conversion