![](/img/trans.png)
[英]Pandas astype throwing invalid literal for int() with base 10 error
[英]Python dataframe - .astype(str).astype(int) gives error ValueError: invalid literal for int() with base 10: ''
我正在尝试将 dataframe 列从 object 转换为 int 使用:
df['col'].astype(str).astype(int)
但我收到一个错误
ValueError: invalid literal for int() with base 10: ''
因为有些元素是空的。 我该如何处理并克服/摆脱这个错误?
这是我的专栏的一部分:
0001081316
0001081316
0001609253
0000928022
0000928022
0000916457
0000916457
0000916457
0000916457
0000016732
0001094093
0000911177
0000816284
0000816284
0000879573
0000018808
0000785080
0000018926
0000018926
0000018926
0000018926
0001319048
0001627223
0000895126
0000895126
0000895126
0000895126
0000895126
0000716133
0000716133
0000716133
0000716133
0000716133
0000020520
0000020520
0000020520
0000020520
0001400891
0001400891
0001400891
0000020947
0000764065
0000764065
0000764065
0000764065
0000764065
0000021344
0000021344
0000215466
0000215466
0001158324
0001323653
0001166691
0001166691
0001166691
0001166691
0001166691
0001166691
0001166691
0000918040
0000023194
0000023217
0001358071
0001163165
0001163165
0001710366
0000897732
0000016918
0000016918
0000732834
0000732834
0000024741
0001018980
0000025305
0000025305
0001051470
0001051470
0000912513
0000028630
0000916540
0000931336
0001571996
0000027904
0000027996
0001090012
0001090012
0001090012
0001090012
0000949039
0000949039
0000949039
0000715957
0000715957
0000029669
0000029669
0000029669
0000029669
0000029669
0000029669
0000029669
0000029669
0000030554
0000030554
0000030554
0000030554
0001326160
0001326160
0001092839
0000821189
0000821189
0000821189
0000821189
0000821189
0000821189
0000750199
0000033213
0000033213
0000915389
0001600470
0001066107
0001066107
0001590895
0000032604
0000032604
0001591763
0001591763
0000880285
0000880285
0000880285
0001161154
0001161154
0001161154
0001024401
0001024401
0000033619
0001532063
0001532063
0001532063
0000887936
0001062613
0000880430
0000880430
0000038074
0000038074
0000831259
0000831259
0000831259
0000831259
问题是 int 列存储在 int32 或 int64 numpy arrays 中,并且两个 dtype 都没有空值的概念。 如果向 int 列添加 NaN 值后立即将其转换为浮点类型,这并非偶然。
对于 Pandas >=0.24 的最新版本,您可以尝试使用可为空的 integer 扩展 dtype:
df['A'] = pd.Series(np.where(df['A'].isna()|(df['A']==''), pd.NA,
df.loc[df['A']!='','A'].apply(int).reindex(df.index)
.fillna(0)), dtype=pd.Int64Dtype)
但要注意 is 被明确声明为实验性的:
笔记
IntegerArray 目前是实验性的。 其 API 或实现可能会在没有警告的情况下更改。
首先填充空元素,然后将它们转换为 int。 它将通过上述错误。 所以首先填充列中的所有空元素然后应用这个......
df['col'].replace('','0',inplace=True)
df['col'].astype(int)
例如:
df=pd.DataFrame(['1','2','4','3',''])
df.replace('','0',inplace=True)
df=df.astype('int')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.