Python中移除DataFrame列表字段内空格的问题求助
解决DataFrame列表元素移除空格的问题
我之前也踩过这个坑!你原来的方法无效,核心原因是df['numbers']列里的每个元素都是列表对象,直接调用replace是把整个列表当作一个整体来处理,根本没触碰到列表内部的字符串元素,自然起不到去空格的作用。
咱们换个思路,针对每个列表里的字符串逐个处理,给你两种实用的解法:
方法一:用apply+列表推导式(最直观)
直接遍历numbers列的每个列表,对列表里的每一个字符串元素移除所有空格:
import pandas as pd # 先构造示例数据 df = pd.DataFrame({ 'ID': [0, 1, 2], 'numbers': [[' 1', ' 2', '3', ' 4'], [' abc', ' zzy'], [' zz12', ' 22wq', ' 78']] }) # 移除列表元素中的空格 df['numbers'] = df['numbers'].apply(lambda x: [s.replace(' ', '') for s in x])
执行后df['numbers']就会变成你想要的格式:
0 [1, 2, 3, 4] 1 [abc, zzy] 2 [zz12, 22wq, 78] Name: numbers, dtype: object
方法二:如果只需要移除元素前后的空格
如果你的需求只是去掉字符串首尾的空格(中间空格保留),可以把replace(' ', '')换成strip():
df['numbers'] = df['numbers'].apply(lambda x: [s.strip() for s in x])
为什么原方法无效?
再补充下原代码的问题:df['numbers'].replace({' ':''}, regex=True)是试图对列中的每个元素(也就是列表)做字符串替换,但列表不是字符串类型,Pandas无法对列表对象执行字符串替换操作,所以这个代码不会产生任何效果。
内容的提问来源于stack exchange,提问作者Mazz
相关产品推荐
相关产品推荐

