Pandas自动推断最佳数据类型:字符串到整数不起作用

zpqajqem  于 2022-12-31  发布在  其他
关注(0)|答案(3)|浏览(115)

在一个列数大于100的 Dataframe 上,我想让panda(v1.4.2)自动将所有列转换为“最佳”数据类型。根据df.convert_dtypes()或df文档,infer_objects()应该可以做到这一点。考虑以下示例:

>>df = pd.DataFrame({"A":["1","2"], "C":["abc","bcd"]})
>>df
   A    C
0  1  abc
1  2  bcd

>>df.dtypes
A    object
C    object
dtype: object

>>df.convert_dtypes().dtypes
A    string
C    string
dtype: object

>>df.infer_objects().dtypes
A    object
C    object
dtype: object

为什么A列没有转换成int?如果我尝试了错误的panda方法,有什么替代方法?

xmakbtuz

xmakbtuz1#

查看convert_dtypes()的文档,该方法似乎正确地完成了从ObjectInt的转换,但无法确定字符串对象是否为数值:

>>> df = pd.DataFrame(
    {
        "A": pd.Series([3, 4, 5], dtype=np.dtype("O")),
        "B": pd.Series(["3", "4", "5"], dtype=np.dtype("O")),
        "C": pd.Series(["abc","bcd"], dtype=np.dtype("O"))
    }
)
         
>>> df.dtypes

A    object
B    object
C    object
dtype: object

>> df.convert_dtypes().dtypes

A     Int64
B    string
C    string
dtype: object

您可以使用以下方法作为转换的解决方法:

>>> df.convert_dtypes().apply(pd.to_numeric, errors="ignore").dtypes

A     Int64
B     int64
C    object
dtype: object
lxkprmvk

lxkprmvk2#

要将A转换为int,可以用途:

df['A'] = pd.to_numeric(df['A'])
tzdcorbm

tzdcorbm3#

[再次编辑]
我做了更多的研究,发现这是不可能的,如果想要解释,在评论中问我。

相关问题