繁体   English   中英

pandas astype 没有按预期工作(悄无声息地严重失败)

[英]pandas astype doesn't work as expected (fails silently and badly)

我遇到了 pandas.astype() 的这种奇怪行为(我使用的是 1.5.2 版)。 当尝试将列转换为 integer 并稍后请求数据类型时,一切似乎都很好。 直到你尝试按行提取值,当你得到不一致的类型时。

代码:

import pandas as pd
import numpy as np
​
df = pd.DataFrame(np.random.randn(3, 3))
df.loc[:, 0] = df.loc[:, 0].astype(int)
​
print(df)
print(df.dtypes)
print(df.iloc[0, :])
print(type(df.values[0, 0]))

出去:

   0         1         2
0  0 -0.232432  1.025643
1 -1  0.556968 -0.729378
2 -1  1.285546 -0.541676
0      int64
1    float64
2    float64
dtype: object
0    0.000000
1   -0.232432
2    1.025643
Name: 0, dtype: float64
<class 'numpy.float64'>

猜猜我在这里做错了什么?

尝试在没有 loc 的情况下调用

df[0] = df[0].astype(int)

也没用

我认为这是由于df.values的使用,因为它会尝试返回 DataFrame 的Numpy 表示 根据文档

默认情况下,返回数组的dtype将是dtype中所有类型的公共 NumPy dtype。

>>> from pandas.core.dtypes.cast import find_common_type
>>> find_common_type(df.dtypes.to_list()) # df is your dataframe
dtype('float64')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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