python - 在 Python pandas 中有选择地将 float 转换为整数和小数

标签 python pandas dataframe types type-conversion

我正在从多个 csv 中读取数据,应用一些过滤器并将它们合并到一个数据框中。 csv 中的原始数据只是数字/分数。 Pandas 正在将它们转换为 float 。没关系,但我只需要 1 列就可以保持原样。要将其转换回整数,我尝试了:

df['PRICE']=df['PRICE'].astype(int)

这对整数非常有效。但是,这也将所有小数转换为整数。意思是,甚至

1162.50 --> 1162

我希望将其更改为:

1152.0  --> 1152
1216.50 --> 1216.5
1226.65 --> 1226.65

提前致谢

最佳答案

您可以使用 pd.DataFrame 构造函数和 dtype=object 重新初始化数据框:

print(df)

      Col1
0  1152.00
1  1216.50
2  1226.65

df = pd.DataFrame(df, dtype=object)
print(df)

      Col1
0     1152
1   1216.5
2  1226.65

或者,如果它只是您要转换的一列,您可以以相同的方式使用 pd.Series 构造函数:

df.Col1 = pd.Series(df.Col1, dtype=object)
print(df)

      Col1
0     1152
1   1216.5
2  1226.65

法定警告:在数据框中混合类型会破坏 pandas/numpy 为纯数字类型提供的所有优化和加速优势。


上面的方法概述了保留数字属性的方法,但是如果要保存为CSV,则必须转换为字符串并截断,否则保存时它们会被强制转换为 float 。您可以这样做:

out = df.astype(str).replace('\.0+$', '', regex=True)
print(out)

      Col1
0     1152
1   1216.5
2  1226.65

out.to_csv('out.csv')

关于python - 在 Python pandas 中有选择地将 float 转换为整数和小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45902991/

相关文章:

apache-spark - pyspark 数据框列 : Hive column

python - Pandas 数据框仅将 lambda 应用于数据框中选定的行(基于条件)

r - 如何在 R 中创建具有相等随机分布的数据子集

python - C++ 中足够大的 ProblemSize 需要 0 运行时间

python - 对象列表python

python - 如何在 Pandas 数据框的列中用零替换 NaN 值?

python - 在 Python Pandas 中查找 ID 的最小值、最大值和平均值

pandas - 如何计算 Pandas 数据帧组中索引或空值的数量

Python插件系统

python - 在Python中以绘图方式勾勒出绘图区域