【问题标题】:Remove extra spaces from all cells in dataframe从数据框中的所有单元格中删除多余的空格
【发布时间】:2019-07-30 15:50:21
【问题描述】:

我有这个功能:

def Remove_Space(string):

    return string.rstrip().lstrip()

我想在数据框中的每个单元格上运行它,这样如果一个值在字符串的字母之前或之后有空格,它们就会被删除。什么是遍历列列表并映射这些值的好方法。

最终目标是拥有一个数据框,其中每列的所有值在字符串前后都没有空格。

我在想一些类似......

for i in df.columns:

    valueDict=dict(zip(df[i], [Remove_Space(x) for x in df[i]])

df.replace(valueDict)

【问题讨论】:

    标签: python pandas dataframe dictionary multiple-columns


    【解决方案1】:

    你可以使用applymap:

    df = df.applymap(lambda x: x.strip())
    

    如果有整数或浮点数,并且你想将整数/浮点数转换为字符串,那么使用这个:

    df = df.applymap(lambda x: str(x).strip())
    

    或者将值保留为整数/浮点数:

    df = df.applymap(lambda x: x.strip() if isinstance(x, str) else x)
    

    【讨论】:

    • 如果有一些列是整数或浮点数怎么办。那么这会抛出一个错误信号,对吧?有没有办法考虑到这一点?
    • 我已经用 2 个选项更新了答案,以防 df 中的整数或浮点数。如果这回答了您的问题,请记住将其标记为已接受:)
    【解决方案2】:

    IIUC,你可以把stack所有的列编成系列,然后str.strip和unstack返回

    示例数据(请注意,所有值都因前后空格而未对齐):

    Out[187]:
          0        1           2
    0  one      two   three
    1    AA  BB               CC
    
    
    df.stack().str.strip().unstack()
    
    Out[186]:
         0    1      2
    0  one  two  three
    1   AA   BB     CC
    

    或者,您可以使用字典推导来strip 每一列并重建新的df

    pd.DataFrame({col: df[col].str.strip() for col in df})
    
    Out[188]:
         0    1      2
    0  one  two  three
    1   AA   BB     CC
    

    【讨论】:

      【解决方案3】:

      更简单的方法:

      df = pd.DataFrame({"c1":['  hello',"andy "],"c2":["Bye ","Lily"]})
      df2 = df.applymap(str.strip)
      print(df2.c1[0])
      'hello'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-19
        • 1970-01-01
        • 2023-01-16
        • 2021-05-05
        相关资源
        最近更新 更多