我有一个 pandas 数据框 df
,其列名和数据类型在另一个文件中指定(读为 data_dict
)。因此,为了正确获取数据,我使用以下代码:
col_list = data_dict['name'].tolist()
dtype_list = data_dict['type'].tolist()
dtype_dict = {col_list[i]: dtype_list[i] for i in range(len(col_list))}
df.columns = col_list
df = df.fillna(0)
df = df.astype(dtype_dict)
但它抛出了这个错误:
invalid literal for int() with base 10: '2.230'
我在线搜索的大多数答案都推荐使用 pd.to_numeric()
或类似 df[col1].astype(float).astype(int)
的方法。这里的问题是 df 包含 50 多列,其中大约 30 列应转换为整数类型。因此我不想一次转换一列的数据类型。
那么我怎样才能轻松修复这个错误呢?
最佳答案
尝试通过 bool 掩码:
mask=df.apply(lambda x:x.str.isalpha(),1).fillna(False)
最后:
df[~mask]=df[~mask].astype(float).astype(int)
或者
cols=df[~mask].dropna(axis=1).columns
df[cols]=df[cols].astype(float).astype(int)
关于python - Pandas astype 为 int() 抛出无效文字,基数为 10 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67791605/