问题将 int 转换为在切片数据帧上浮动

问题描述 投票:0回答:1

这是示例代码:

import pandas as pd

data = {
    'Id': ['id1', 'id2', 'id3', 'id4'],
    'col1': [41, 41, 41, 41],
    'col2': [6, 6, 6, 6]
}

df = pd.DataFrame(data)

df.iloc[:,1:] = df.iloc[:,1:].astype(float)
df.iloc[:,1:] = df.iloc[:,1:].div(150)

这会产生错误:

Name: col1, dtype: float64' has dtype incompatible with int64, please explicitly cast to a compatible dtype first.
  df.iloc[:,1:] = df.iloc[:,1:].astype(float)

但是有效的是:

for col in df.columns[1:]:
    df[col] = df[col].astype(float).div(150)

这是解决这个问题的唯一方法吗?看起来效率很低。

python pandas dataframe
1个回答
0
投票

问题是由于在索引分配中使用了切片

:

df[col]
将使用新的 dtype 创建一个新系列,但
df.loc[:]
(或
df.iloc[:, 1:]
)只会更改值 ,同时保留原始 dtypes。这就是你错误的原因。

用途:

cols = df.columns[1:]

df[cols] = df[cols].astype(float).div(150)

输出:

    Id      col1      col2
0  id1  0.001822  0.000267
1  id2  0.001822  0.000267
2  id3  0.001822  0.000267
3  id4  0.001822  0.000267
© www.soinside.com 2019 - 2024. All rights reserved.