我正在将CSV文件读入DataFrame。我需要去掉所有字符串单元格中的空格,在Python 2中保持其他单元格不变。7.
这是我正在做的:
def remove_whitespace( x ):
if isinstance( x, basestring ):
return x.strip()
else:
return x
my_data = my_data.applymap( remove_whitespace )
有没有一个更好的或更习惯的Pandas的方式来做到这一点?
有没有更有效的方法(也许是通过列方式来做事情)?
我试图寻找一个明确的答案,但是关于这个主题的大多数问题似乎都是如何从列名中去掉空格,或者假设单元格都是字符串。
9条答案
按热度按时间gpnt7bae1#
在寻找我可以使用的快速和简约的片段时偶然发现了这个问题。不得不自己从上面的岗位上组装一个。也许有人会觉得有用:
huwehgph2#
你可以使用pandas的
Series.str.strip()
方法来快速地为每个字符串类型的列做这件事:ut6juiuv3#
我们希望:
1.将我们的函数应用于 Dataframe 中的每个元素-使用
applymap
。1.使用
type(x)==str
(而不是x.dtype == 'object'
),因为Pandas将为混合数据类型的列标记为object
(object
列可能包含int
和/或str
)。1.维护每个元素的数据类型(我们不想将所有元素转换为
str
,然后去掉空格)。因此,我发现以下是最简单的:
df.applymap(lambda x: x.strip() if type(x)==str else x)
yftpprvb4#
调用
pandas.read_csv
时,可以使用一个正则表达式,该表达式匹配零个或多个空格,后跟一个逗号,后面再跟零个或多个空格作为分隔符。例如,
"data.csv"
:(The第一行在
XXX
之后的三个空格处结束,而第二行在最后一个Y
处结束。)下面使用
pandas.read_csv()
读取文件,并使用正则表达式' *, *'
作为分隔符。(使用正则表达式作为分隔符仅在read_csv()
的“python”引擎中可用。)ilmyapht5#
数据['值']。str.strip()”上面答案对我不起作用,但我找到了一个简单的解决方法。我相信有更好的方法来做到这一点。str.strip()函数在Series上工作。因此,我将dataframe列转换为Series,去掉空白,将转换后的列替换回dataframe。下面是示例代码。
ztigrdn86#
下面是一个使用pandas apply的列式解决方案:
这将把对象类型列中的值转换为字符串。应谨慎使用混合类型的列。例如,如果您的列是邮政编码为20001和' 21110 ',则最终将显示为'20001'和'21110'。
fkaflof67#
这对我很有效-将其应用于整个 Dataframe :
0x6upsns8#
我发现下面的代码很有用,可能会帮助其他人。此代码段将允许您根据您的用例删除列以及整个DataFrame中的空格。
5w9g7ksd9#
实际上,我认为使用select_dtypes可能比if语句快一点: