剥离/修剪数据框的所有字符串

新手上路,请多包涵

在 python/pandas 中清理多类型数据框的值,我想修剪字符串。我目前正在按照两个说明进行操作:

 import pandas as pd

df = pd.DataFrame([['  a  ', 10], ['  c  ', 5]])

df.replace('^\s+', '', regex=True, inplace=True) #front
df.replace('\s+$', '', regex=True, inplace=True) #end

df.values

这很慢,我可以改进什么?

原文由 mxdbld 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

您可以使用 DataFrame.select_dtypes 选择 string 列,然后选择 --- apply 功能 str.strip

Notice: Values cannot be types like dicts or lists , because their dtypes is object .

 df_obj = df.select_dtypes(['object'])
print (df_obj)
0    a
1    c

df[df_obj.columns] = df_obj.apply(lambda x: x.str.strip())
print (df)

   0   1
0  a  10
1  c   5

但如果只有几列使用 str.strip

 df[0] = df[0].str.strip()

原文由 jezrael 发布,翻译遵循 CC BY-SA 4.0 许可协议

金钱射击

这是使用 applymap 的精简版本,仅当值为字符串类型时,使用简单的 lambda 表达式调用 strip

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

完整示例

一个更完整的例子:

 import pandas as pd

def trim_all_columns(df):
    """
    Trim whitespace from ends of each value across all series in dataframe
    """
    trim_strings = lambda x: x.strip() if isinstance(x, str) else x
    return df.applymap(trim_strings)

# simple example of trimming whitespace from data elements
df = pd.DataFrame([['  a  ', 10], ['  c  ', 5]])
df = trim_all_columns(df)
print(df)

>>>
   0   1
0  a  10
1  c   5

工作示例

这是一个由 trinket 托管的工作示例: https ://trinket.io/python3/e6ab7fb4ab

原文由 Jonathan B. 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏