【问题标题】:How to cut or truncate any integer column value - pandas如何剪切或截断任何整数列值 - pandas
【发布时间】:2021-03-31 20:55:06
【问题描述】:

从熊猫数据框中,一些值太大,所以想法是减少数字,例如,如果我有 150 000 个整数作为列中的值,我想删除最后 3 个整数 (000) - > 从 150 000 到 150。

数据框:

cut_nums = [15000,1200,500,7000]

data_frame = pd.DataFrame(cut_nums, columns = ['Col_val'])

输出:

    Col_val
0   15000
1   1200
2   500
3   7000

尝试解决它:

data_frame['Col_val'] = np.where((data_frame.Col_val < 100000), round(Col_val), data_framef.Col_val)

还有其他函数可以操作浮点数(例如:round()、cut()、int()),但不能操作整数。 但是,基本思想是找到所有具有太多整数的数字并将它们剪切/截断。

期望的输出:

    Col_val
0   15
1   12
2   50
3   70

例子二全切为三个整数:

    Col_val
0   150
1   120
2   500
3   700

示例二全为一整数:

0   1
1   1
2   5
3   7

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    不太确定效果,但尝试正则表达式并转换回整数。您可以随时更改大括号中的数字。

    data_frame['Col_val'].astype(str).str.extract('(^\d{2})').astype(int)
    

    【讨论】:

    • ValueError:无法将浮点 NaN 转换为整数。即使我确保已将整个列值转换为整数 (.astype(int)) 仍然这是我得到的错误。可能是因为某些值或小于 4 个整数的默认值。似乎不是最有效的方法。如果我去掉你的代码 astype(int) 的最后一部分,它就可以了,但它会将小于 4 个整数的代码转换为 NaN
    • @jcaliz output: 0, 1000, 5000, NaN, NaN, 1500 original df: 10000, 50000, 4, 9, 15000。同样的问题似乎是字符串的长度问题那已经小于 4。可能 len() 和 iloc/loc 的条件是解决方案?或者只是一个忽略 > 4 的行的条件
    • 怎么样:data_frame['Col_val'].astype(str).str.extract('(^\d{,2})').astype(int)
    猜你喜欢
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多