【问题标题】:How to remove the last 2 characters of every element in a column of a pandas dataframe in python? [duplicate]如何删除python中pandas数据框列中每个元素的最后2个字符? [复制]
【发布时间】:2021-11-27 10:05:07
【问题描述】:

我有一个大数据框 (df),在最后一列中,所有元素都显示为

1055.0000.0

所以最后 2 个字符总是“.0”。最有效的方法是什么?最后一列的名称总是不同的,所以我不知道如何解决这个问题。我试图循环遍历 pandas df 但它占用了太多内存并破坏了代码。有没有办法做类似的事情

df[ 最后一列] = df[ 最后一列 - 最后 2 个字符]

或者创建一个新的 df 然后追加它?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    矢量化操作几乎总是更快。 .str 方法允许 pandas 向量化字符串

    df["last_col"].str[:-2]
    

    可以在 jupyter notebook 中使用 %%timeit 魔法命令计时。

    %%timeit
    df.iloc[:, -1].str[-2:]
    >>> 352 µs ± 4.68 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
    %%timeit
    df["last_col"].str[:-2]
    >>> 242 µs ± 4.76 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    

    【讨论】:

      【解决方案2】:

      你也可以使用rsplit:

      s = '105.0000.0'
      s.rsplit('.0', 1)[0]
      

      输出:

      105.0000
      

      【讨论】:

        【解决方案3】:

        尝试使用str 访问器:

        df.iloc[:, -1] = df.iloc[:, -1].astype(str).str[-2:].astype(int)
        

        【讨论】:

        • 这非常有效,谢谢。那么你将如何将列中的所有元素变成整数?
        • @JohnCena1997 完成!已编辑
        • 非常感谢。最后一件事,我收到一条错误消息“只能将 .str 访问器与字符串值一起使用,在 pandas 中使用 np.object_ dtype”,我假设这意味着输入例如 1055.0000.0 未被识别为字符串?我将如何事先更改整个列?
        • @JohnCena1997 已编辑!
        猜你喜欢
        • 2013-02-15
        • 2022-12-12
        • 2018-10-30
        • 2023-01-18
        • 2014-06-18
        • 2019-04-08
        • 2014-04-23
        • 2016-02-29
        • 1970-01-01
        相关资源
        最近更新 更多