python - 从第一列开始选择小数(非舍入)到 Pandas DataFrame 后的一定位数 - Python
问题描述
我只是想为从第 1 列(python index-0)开始的 pandas 数据框中的数据选择小数点后的一定位数(5 位)而不进行四舍五入
例如,我的熊猫看起来像这样
ids value1 value2 value3 value4
ex12 0.1345656 0.1345656 0.1345656 0.1345656
ex13 0.1345656 0.1345656 0.1345656 0.1345656
ex14 0.1345656 0.1345656 0.1345656 0.1345656
ex15 0.1345656 0.1345656 0.1345656 0.1345656
我希望它被转换成这个新的结果数据框:
ids value1 value2 value3 value4
ex12 0.13456 0.13456 0.13456 0.13456
ex13 0.13456 0.13456 0.13456 0.13456
ex14 0.13456 0.13456 0.13456 0.13456
ex15 0.13456 0.13456 0.13456 0.13456
所以第一列(ids)不应该被转换触及,效果应该只从下一列开始发生。
这是我在 Python 中的代码尝试:
import pandas as pd
data = [['ex12', 0.1345656, 0.1345656, 0.1345656 , 0.1345656],
['ex13', 0.1345656, 0.1345656, 0.1345656 , 0.1345656],
['ex14', 0.1345656, 0.1345656, 0.1345656 , 0.1345656],
['ex15', 0.1345656, 0.1345656, 0.1345656 , 0.1345656]
]
df
ids values1 value2 value3 value4
0 ex12 0.134566 0.134566 0.134566 0.134566
1 ex13 0.134566 0.134566 0.134566 0.134566
2 ex14 0.134566 0.134566 0.134566 0.134566
3 ex15 0.134566 0.134566 0.134566 0.134566
当我将其转换为字符串数据类型时它不起作用,因此我可以将它们作为字符串处理(对它们进行切片)。但是,当我这样做时,生成的转换是按行而不是按列的,并且该操作对其余列的执行也不相同。有没有办法在熊猫中做到这一点?
df.apply(str).apply(lambda x: x[:12])
ids 0 ex12\n1
values1 0 0.13456
value2 0 0.13456
value3 0 0.13456
value4 0 0.13456
dtype: object
非常感谢你。
解决方案
对于一列,您可以试试这个
(df.value1 * 1e5).astype(int) / 1e5
Out[193]:
0 0.13456
1 0.13456
2 0.13456
3 0.13456
Name: value1, dtype: float64
对于您可以使用的所有列apply
df.iloc[:,1:].apply(lambda x: (x * 1e5).astype(int) / 1e5)
Out[197]:
value1 value2 value3 value4
0 0.13456 0.13456 0.13456 0.13456
1 0.13456 0.13456 0.13456 0.13456
2 0.13456 0.13456 0.13456 0.13456
3 0.13456 0.13456 0.13456 0.13456
放回您的数据框。利用update
df.update(df.iloc[:,1:].apply(lambda x: (x * 1e5).astype(int) / 1e5))
print(df)
Output:
ids value1 value2 value3 value4
0 ex12 0.13456 0.13456 0.13456 0.13456
1 ex13 0.13456 0.13456 0.13456 0.13456
2 ex14 0.13456 0.13456 0.13456 0.13456
3 ex15 0.13456 0.13456 0.13456 0.13456
如果要创建新数据框,请使用join
df_new = df.iloc[:,[0]].join(df.iloc[:,1:]
.apply(lambda x: (x * 1e5).astype(int) / 1e5))
Out[210]:
ids values1 value2 value3 value4
0 ex12 0.13456 0.13456 0.13456 0.13456
1 ex13 0.13456 0.13456 0.13456 0.13456
2 ex14 0.13456 0.13456 0.13456 0.13456
3 ex15 0.13456 0.13456 0.13456 0.13456
推荐阅读
- python - 如何从 PySpark 列表中删除/替换字符
- postman - 如何从 Postman 的正文请求中的数据文件(嵌套 json)中获取数据变量
- python - 当它只有日期时,如何在熊猫数据框的索引处显示时间(也以所需的格式)?
- android - 如何清除 ExpandableListView?
- java - 打印出在 String 中找到 Char 的行号
- oracle - 如何创建将数据从一个表传输到另一个表的触发器
- python - 如何在python中编写for循环以复制熊猫数据框
- javascript - 如何显示我的 owl-carousel 的第二个项目的一小部分?
- machine-learning - 如图所示,如何将两个具有密集层的 lstm 连接起来?
- python - Python 电子邮件库不添加所有 MIME 文本部分