在pandas中将一列的数据类型从string更改为integer [duplicate]

li9yvcax  于 2023-10-14  发布在  其他
关注(0)|答案(1)|浏览(112)

此问题已在此处有答案

How can I cast a Pandas string column to the new nullable Int64 type?(4个答案)
15小时前关门了。
我在Opensearch索引中有如下数据:
文件1:单位:“10”
文档2:单位:““
文件3:单位:“20”
在lambda中,我使用pandas进行数据转换。在最后的响应中,我希望像下面这样的输出将““转换为null,并将字符串值转换为整数:文件1:单位:10
文件2:单位:空
文件三:单位:20
我尝试了astype,但它给我的错误,如:无法将非有限值NA转换为整数。

aiazj4mn

aiazj4mn1#

你可以使用以下代码:

import numpy as np
import pandas as pd

df = pd.DataFrame()
df['Document'] = [1, 2, 3]
df['units'] = ["10", " ", "20"]

df.loc[df["units"] == " ", "units"] = np.nan
df["units"] = df["units"].astype(float)

这将用missing(np.nan)替换所有的" ",并将剩余的字符串转换为浮点数(假设它们都只包含数字字符)。
在pandas中,你不能直接在同一列中表示NaN和整数,所以floats是最好的选择:http://pandas.pydata.org/pandas-docs/stable/user_guide/gotchas.html#support-for-integer-na
输出量:
| | 单位| units |
| --|--|--|
| 0 | 1 |10.0|
| 1 | 2 |楠|
| 2 | 3 |20.0|
如果您确实希望列为整数类型,则可以使用pandas或pyarrow提供的可空整数扩展dtypes之一

df.loc[df["units"] == " ", "units"] = np.nan
df["units"] = df["units"].astype(float).astype(pd.Int64Dtype())

| | 单位| units |
| --|--|--|
| 0 | 1 | 10 |
| 1 | 2 |楠|
| 2 | 3 | 20 |

相关问题