我有以下 dtypeobject
的数据帧:
col1 col2 col3
0 1.1 3.3 spam
1 2.2 foo eggs
2 bar 4.4 5.5
我想将所有浮点数转换为整数,然后将所有内容转换为字符串,因此输出将是 dtypestring
:
col1 col2 col3
0 1 3 spam
1 2 foo eggs
2 bar 4 5
是否有某些东西允许我将数据帧转换为 int 但忽略错误? 还是以不同的方式实现这一点? (使用errors = 'ignore'
,似乎忽略了整件事(
您可以使用帮助程序函数,该函数:
- 尝试将对象中的内容转换为
float
- 因此"2.5"和"2"将能够被翻译(以及 Python 的float
函数可以解释为float
值的任何内容(,但是"你好。你好吗? - 然后尝试将该
float
转换为int
- 然后返回其
str
值
如果float
转换失败 - 那么它只会返回您的原始对象,因为从技术上讲,只有float
对话可以失败,如果成功,您可以随时int(some_float)
并且str
将始终有效(失败一些奇怪的自定义类 - 故意导致它失败(。
例如:
def try_to_int(obj):
try:
return str(int(float(obj)))
except (ValueError, TypeError):
return obj
然后与new_df = df.applymap(try_to_int)
一起使用
一种选择是转换为字符串,然后使用正则表达式删除小数。
import pandas as pd
df = pd.DataFrame({'col1': [1.1, 2.2, 'bar'],
'col2': [3.3, 'foo', 4.4],
'col3': ['spam', 'eggs', 5.5]})
df = df.astype(str).replace(r'(-?d+).d+', r'1', regex=True)
# returns:
col1 col2 col3
0 1 3 spam
1 2 foo eggs
2 bar 4 5