我有两个env,一个Pandas=2.1.4,另一个Pandas=1.4.2,当我运行以下代码时,它们给出了不同的结果.

import pandas as pd

d = {'col0': ['a', 'b'], 'col1': [1.0, 2.0], 'col2': [3.0, 4.0]}
df = pd.DataFrame(data=d)
print(df)
df.iloc[:,1:3] = df.iloc[:,1:3].astype('int32')
print(df)

1.4.2提供:

  col0  col1  col2
0    a   1.0   3.0
1    b   2.0   4.0
  col0  col1  col2
0    a     1     3
1    b     2     4

2.1.4给予:

  col0  col1  col2
0    a   1.0   3.0
1    b   2.0   4.0
  col0  col1  col2
0    a   1.0   3.0
1    b   2.0   4.0

我如何修改代码,使其产生与1.4.2和2.1.4的1.4.2输出中相同的结果?请帮我保留一个班轮.

另外,两个Pandas 版本之间的变化是什么导致了不同的行为?

非常感谢!

推荐答案

问题是,赋值为part of a column并不会降低dtype.如果你有一个浮点型,赋值一个整型将保持浮点型.

您可能应该使用astype:

df = df.astype(dict.fromkeys(df.columns[1:3], 'int32'))

或者,如果可能有出错的风险:

df = df.astype(dict.fromkeys(df.columns[1:3], 'int32'), errors='ignore')

请注意,如果您将full column without slicing:

cols = df.columns[1:3]

df[cols] = df[cols].astype('int32')

Python-3.x相关问答推荐

如何在matplotlib中显示次要刻度标签

我想判断df_entry_log[AM_PM],并根据测试填充列

Python-Django 设置 Pandas DataFrame 的多索引不会分组/合并最后一个索引

我无法直接在 VSCode 中运行该程序,但可以使用 VScode 中的终端运行它

如何使用 Selenium Python 连续单击一个按钮直到另一个元素出现?

PyTest:尽管明确运行了测试,但是被标记为没有运行测试

Python ** 用于负数

协议不支持地址系列在将 Scapy L3socket 与 WSL 一起使用时

Dask 多阶段资源设置导致 Failed to Serialize 错误

总结基于条件的值,如果不匹配则保留当前值

预分配一个无列表

Python中调用者函数的访问变量

为什么中断比引发异常更快?

变量类型注解NameError不一致

python - 使用 matplotlib 和 boto 将绘图从内存上传到 s3

为什么 Python 不能识别我的 utf-8 编码源文件?

带有数千个逗号刻度标签的 MatPlotLib 美元符号

在 linux mint 上安装 python3-venv 模块

如何判断列表中的所有项目是否都是字符串

如何从集合中删除多个元素?