【问题标题】:Pandas trim leading & trailing white space in a dataframe熊猫修剪数据框中的前导和尾随空格
【发布时间】:2022-02-03 20:46:41
【问题描述】:

开发一个修剪前导和尾随空格的函数。

这是一个简单的示例,但实际文件包含更复杂的行和列。

df=pd.DataFrame([["A b ",2,3],[np.nan,2,3],\
[" random",43,4],[" any txt is possible "," 2 1",22],\
["",23,99],[" help ",23,np.nan]],columns=['A','B','C'])

结果应消除所有前导和尾随空格,但保留文本之间的空格。

df=pd.DataFrame([["A b",2,3],[np.nan,2,3],\
["random",43,4],["any txt is possible","2 1",22],\
["",23,99],["help",23,np.nan]],columns=['A','B','C'])

请注意,该功能需要涵盖所有可能的情况。 谢谢你

【问题讨论】:

  • 您能否向我们展示您所追求的输入和输出,以及到目前为止您尝试过的操作。尝试详细说明出了什么问题。
  • @scagood,第二个代码应该给出它应该是什么样子的最终结果

标签: python pandas


【解决方案1】:

我认为需要检查值是否为字符串,因为列中的混合值 - 数字与字符串以及每个字符串调用 strip:

df = df.applymap(lambda x: x.strip() if isinstance(x, str) else x)
print (df)
                     A    B     C
0                  A b    2   3.0
1                  NaN    2   3.0
2               random   43   4.0
3  any txt is possible  2 1  22.0
4                        23  99.0
5                 help   23   NaN

如果列具有相同的 dtypes,则不会像您的示例中那样为 B 列中的数值获取 NaNs:

cols = df.select_dtypes(['object']).columns
df[cols] = df[cols].apply(lambda x: x.str.strip())
print (df)
                     A    B     C
0                  A b  NaN   3.0
1                  NaN  NaN   3.0
2               random  NaN   4.0
3  any txt is possible  2 1  22.0
4                       NaN  99.0
5                 help  NaN   NaN

【讨论】:

    【解决方案2】:

    我认为使用正则表达式和替换可以做到这一点:

    df = df.replace(r"^ +| +$", r"", regex=True)
    

    正则表达式的解释:

    • ^ 是行首
    • (空格和加号,+)是一个或多个空格
    • |是或
    • $ 是行尾。

    因此它会搜索前导(行首和空格)和尾随(空格和行尾)空格,并用空字符串替换它们。

    【讨论】:

      猜你喜欢
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-07-25
      • 2011-06-03
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多