Pythonic/efficient方法从i中有stringlike对象的每个Pandas数据帧单元格中去除空白

2024-09-29 02:25:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将CSV文件读入数据帧。我需要从所有stringlike单元格中去掉空白,让Python 2.7中的其他单元格保持不变。

我在做的是:

def remove_whitespace( x ):
    if isinstance( x, basestring ):
        return x.strip()
    else:
        return x

my_data = my_data.applymap( remove_whitespace )

对于熊猫来说,有更好或者更习惯的方法吗?

有没有一种更有效的方法(也许是按列来做)?

我试着寻找一个明确的答案,但是关于这个主题的大多数问题似乎是如何从列名本身去掉空白,或者假设单元格都是字符串。


Tags: 文件csv数据方法datareturnifmy
3条回答

调用pandas.read_csv时,可以使用与零个或多个空格后跟逗号、零个或多个空格匹配的正则表达式作为分隔符。

例如,这里有"data.csv"

In [19]: !cat data.csv
1.5, aaa,  bbb ,  ddd     , 10 ,  XXX   
2.5, eee, fff  ,       ggg, 20 ,     YYY

(第一行在XXX后以三个空格结束,而第二行在最后一个Y结束。)

下面使用pandas.read_csv()读取文件,使用正则表达式' *, *'作为分隔符。(使用正则表达式作为分隔符仅在read_csv()的“python”引擎中可用。)

In [20]: import pandas as pd

In [21]: df = pd.read_csv('data.csv', header=None, delimiter=' *, *', engine='python')

In [22]: df
Out[22]: 
     0    1    2    3   4    5
0  1.5  aaa  bbb  ddd  10  XXX
1  2.5  eee  fff  ggg  20  YYY

您可以使用pandas'Series.str.strip()方法对每个类似字符串的列快速执行此操作:

>>> data = pd.DataFrame({'values': ['   ABC   ', '   DEF', '  GHI  ']})
>>> data
      values
0     ABC   
1        DEF
2      GHI  

>>> data['values'].str.strip()
0    ABC
1    DEF
2    GHI
Name: values, dtype: object

偶然发现这个问题,同时寻找一个快速和极简的片段,我可以使用。必须自己从上面的柱子上组装一个。也许有人会发现它很有用:

data_frame_trimmed = data_frame.apply(lambda x: x.str.strip() if x.dtype == "object" else x)

相关问题 更多 >