我正在从多个 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/