无法将 pandas 列从字符串转换为 int

Posted

技术标签:

【中文标题】无法将 pandas 列从字符串转换为 int【英文标题】:Cannot convert pandas column from string to int 【发布时间】:2017-02-04 03:53:09 【问题描述】:

数据框中的下面的列需要转换为int:

dsAttendEnroll.District.head()

0    DISTRICT 01
1    DISTRICT 02
2    DISTRICT 03
3    DISTRICT 04
4    DISTRICT 05
Name: District, dtype: object

使用 astype 会出现以下错误,怎么办?

dsAttendEnroll.District = dsAttendEnroll.District.map(lambda x: x[-2:]).astype(int)

ValueError: 以 10 为底的 long() 的无效文字:'LS'

【问题讨论】:

这意味着你的数据有一些以LS... 我认为你首先需要决定你想用LS 数据做什么。您要丢弃它还是将其拆分为单独的列(如下所示)? LS 有效还是无效? 感谢过滤掉不正确的数据解决了这个问题。 【参考方案1】:

您可以使用splitstr[1]to_numeric 选择第二个列表,其中参数errors='coerce' - 它不是将数值转换为NaN

print (df)
      District
0  DISTRICT 01
1  DISTRICT 02
2  DISTRICT 03
3  DISTRICT 04
4  DISTRICT 05
5  DISTRICT LS

print (df.District.str.split().str[1])
0    01
1    02
2    03
3    04
4    05
5    LS
Name: District, dtype: object

print (pd.to_numeric(df.District.str.split().str[1], errors='coerce'))
0    1.0
1    2.0
2    3.0
3    4.0
4    5.0
5    NaN
Name: District, dtype: float64

使用切片 2 最后一个字符的另一种解决方案:

print (df.District.str[-2:])
0    01
1    02
2    03
3    04
4    05
5    LS
Name: District, dtype: object

print (pd.to_numeric(df.District.str[-2:], errors='coerce'))
0    1.0
1    2.0
2    3.0
3    4.0
4    5.0
5    NaN
Name: District, dtype: float64

【讨论】:

我添加了另一个解决方案,请检查一下。【参考方案2】:

你可以试试:

dsAttendEnroll.District=pd.to_numeric(dsAttendEnroll.District)
dsAttendEnroll.District=dsAttendEnroll.District.astype(int)

查看文档here。

【讨论】:

以上是关于无法将 pandas 列从字符串转换为 int的主要内容,如果未能解决你的问题,请参考以下文章

将 pandas 列从字符串 Quarters 和 Years 数组转换为 datetime 列

dbReadTable 将日期列从 SQL 数据库强制转换为字符

Spark - 将包含 JSON 字符串的列从 StringType 转换为 Array Type(StringType())

Pandas 映射到 TRUE/FALSE 作为字符串,而不是布尔值

熊猫:将 dtype 'object' 转换为 int

无法将字符串转换为 pandas 中的浮点数(ValueError)