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