繁体   English   中英

Python dataframe -.astype(str).astype(int) 给出错误 ValueError: invalid literal for int() with base 10: ''

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM