Python熊猫错误,同时删除额外的空白空间

问题描述:

我想清理使用命令额外空格的数据框中的一列。数据帧有近800万条记录Python熊猫错误,同时删除额外的空白空间

datt2.My_variable=datt2.My_variable.str.replace('\s+', ' ') 

我最终得到下面的错误

MemoryError        Traceback (most recent call last) 
<ipython-input-10-158a51cfaa3d> in <module>() 
----> 1 datt2.My_variable=datt2.My_variable.str.replace('\s+', ' ') 

c:\python27\lib\site-packages\pandas\core\strings.pyc in replace(self, pat, repl, n, case, flags) 
    1504  def replace(self, pat, repl, n=-1, case=True, flags=0): 
    1505   result = str_replace(self._data, pat, repl, n=n, case=case, 
-> 1506        flags=flags) 
    1507   return self._wrap_result(result) 
    1508 

c:\python27\lib\site-packages\pandas\core\strings.pyc in str_replace(arr, pat, repl, n, case, flags) 
    334   f = lambda x: x.replace(pat, repl, n) 
    335 
--> 336  return _na_map(f, arr) 
    337 
    338 

c:\python27\lib\site-packages\pandas\core\strings.pyc in _na_map(f, arr, na_result, dtype) 
    152 def _na_map(f, arr, na_result=np.nan, dtype=object): 
    153  # should really _check_ for NA 
--> 154  return _map(f, arr, na_mask=True, na_value=na_result, dtype=dtype) 
    155 
    156 

c:\python27\lib\site-packages\pandas\core\strings.pyc in _map(f, arr, na_mask, na_value, dtype) 
    167   try: 
    168    convert = not all(mask) 
--> 169    result = lib.map_infer_mask(arr, f, mask.view(np.uint8), convert) 
    170   except (TypeError, AttributeError): 
    171 

pandas\src\inference.pyx in pandas.lib.map_infer_mask (pandas\lib.c:65837)() 

pandas\src\inference.pyx in pandas.lib.maybe_convert_objects (pandas\lib.c:56806)() 

MemoryError: 
+1

如果你使用'datt2.My_variable.str.replace(r'\ s +','',inplace = True,regex = True)'? –

+0

@WiktorStribiżew,这个函数没有参数'inplace'或'regex'。我仍然继续前进并执行它,并且错误消息正如所预期的那样:TypeError:replace()得到了一个意外的关键字参数'inplace'' – Enthusiast

+0

这是很多你正在处理的数据吗? – languitar

Question: I am trying to clean a column in data frame of extra white space ...
datt2.My_variable=datt2.My_variable.str.replace('\s+', ' ')

请评论,我理解你的expression正确?

pandas  Column   Column    DataSeries 
DataFrame  Name   DataSeries    Methode 
|-^-|  |----^-----| |-------^-------| |----------^----------| 
datt2  .My_variable = datt2.My_variable .str.replace('\s+', ' ') 

我敢肯定使用re.sub是一样的使用pandas.str.replace(...),但没有复制整个column数据。

From the pandas doc:
Series.str.replace(pat, repl, n=-1, case=True, flags=0)
Replace occurrences of pattern/regex in the Series/Index with some other string.
Equivalent to str.replace() or re.sub().


尝试纯python,例如:

import re 
    for idx in df.index: 
     df.loc[idx, 'My_variable'] = re.sub('\s\s+', ' ', df.loc[idx, 'My_variable']) 

注意:考虑使用'\ S \ S +',而不是 '\ S +'。
使用'\ s +'将取代ONE BLANKONE BLANK,这是无用的。

与Python测试:3.4.2 - 大熊猫:作为或回答,如果这是为你工作发表意见,为什么不0.19.2
回来和标志你的问题。

+0

这是一个循环,不是吗?这正是我为什么使用向量化正则表达式替换整个数据框列的原因。这并不回答我的原始问题。 – Enthusiast

+0

在熊猫数据框中,我们有行和列。在re.sub中,对于一个熊猫列,您必须像循环中的代码块一样逐行处理所有内容。但是,pandas.str.replace可以处理整个列而无需编写循环。这在过去对我有用。然而,我现在使用的数据是800万行。这个库无法扩展这个数据量。 – Enthusiast

+0

@Enthusiast:我明白你的观点,请确认,我是否正确理解你的“表达”。 – stovfl