我有一个这样的数据框:
import pandas as pd
test_df = pd.DataFrame({'foo':['1','2','92#']})
test_df
foo
0 1
1 2
2 92#
我想将类型转换为int64:
test_df.foo.astype('int64')
但我收到错误消息,因为’92#’无法转换为int64:
ValueError: invalid literal for int() with base 10: ’92#’
所以我想删除所有无法转换为int64的行,并得到我的结果:
foo
0 1
1 2
最佳答案 如果您想要一个整体应用于dataFrame的解决方案,请通过apply调用pd.to_numeric,并使用结果掩码删除行:
test_df[test_df.apply(pd.to_numeric, errors='coerce').notna()].dropna()
foo
0 1
1 2
这不会修改test_df的值. OTOH,如果你想在转换值时删除行,你的解决方案简化了:
test_df.apply(pd.to_numeric, errors='coerce').dropna()
foo
0 1.0
1 2.0
如果要将结果类型转换为int64,请在末尾添加.astype(int)调用.