gpt4 book ai didi

python - 如何舍入包含混合数据类型的 Pandas DataFrame 中的值以进行进一步的数据比较?

转载 作者:太空宇宙 更新时间:2023-11-03 15:08:12 25 4
gpt4 key购买 nike

我有一个数据框 df_left:

  IDX1 IDX2 IDX3     IDX4 ValueType Value
0 A A1 Q 1983 Q4 W 10.123
1 A A1 Q 1983 Q4 X A
2 A A1 Q 1983 Q4 Y F
3 A A1 Q 1983 Q4 Z NaN
4 A A1 Q 1984 Q1 W 110.456
...

根据之前的帖子创建:

Background information

AND 数据框 df_right:

  IDX1 IDX2 IDX3     IDX4 ValueType Value
0 A A1 Q 1983 Q4 W 10
1 A A1 Q 1983 Q4 X A
2 A A1 Q 1983 Q4 Y F
3 A A1 Q 1983 Q4 Z NaN
4 A A1 Q 1984 Q1 W 110

我比较并协调数据的值和文本,其以下工作:

df_compare = pd.merge(df_Left, df_Right, how ='outer', on = ['IDX1', 'IDX2', 'IDX3', 'IDX4', 'ValueType'])
df_compare.columns = ['IDX1', 'IDX2', 'IDX3', 'IDX4', 'ValueType', 'From', 'To']
df_compare = df_compare[df_compare.From!=df_compare.To]

虽然结果符合预期,但在比较之前我想将值列中的数据四舍五入。

我试过:

df.apply(np.round)

还有:

df.round(decimals=0, out=None)

但都如预期的那样出错:

AttributeError: ("'str' object has no attribute 'rint'", u'occurred at index Code')

最佳答案

这是一个相当通用的解决方案,您可以将其应用于多列。 “收件人”列不需要四舍五入,我只是为了两列而不是一列的通用性而将其包括在内:

df

IDX1 IDX2 IDX3 IDX4 ValueType From To
0 A1 Q 1983 Q4 W 10.123 10
3 A1 Q 1983 Q4 Z NaN NaN
4 A1 Q 1984 Q1 W 110.456 110

In [399]: df[['From','To']].astype(float).apply(np.round)

From To
0 10 10
3 NaN NaN
4 110 110

这是最安全的方法,因为它不会让您不小心删除非数字值,但如果您确实有混合类型,您可以这样做:

df[['From','To']].convert_objects(convert_numeric=True).apply(np.round)

From To
0 10 10
3 NaN NaN
4 110 110

但是由于这会将任何非数字值转换为 NaN,因此在覆盖任何内容之前请确保这是您想要的。

关于python - 如何舍入包含混合数据类型的 Pandas DataFrame 中的值以进行进一步的数据比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30258120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com