2017-03-17 1 views
0

명령을 사용하여 여분의 공백 데이터 프레임에서 열을 정리하려고합니다. 데이터 프레임은 내가 당신의 expression 올바르게 이해한다, 800 만 개 기록여분의 공백을 제거하는 동안 Python pandas 오류가 발생했습니다.

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

답변

0

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

언급하시기 바랍니다있다?

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 +'를 사용하면 중 하나의 공백이이고 공백이 하나만 존재합니다.은 쓸모가 없습니다. 파이썬 테스트

: 3.4.2 - 팬더 :이 당신을 위해 작동하는지 대답 또는 왜 안 주석으로 0.19.2
는 질문을 다시 와서 플래그입니다.

+0

루프입니다. 그렇지 않습니까? 그것이 전체 데이터 프레임 열에 대한 정규 표현식의 벡터화 된 형식을 사용한 이유입니다. 이 질문은 내 원래 질문에 대답하지 않습니다. – Enthusiast

+0

팬더 데이터 프레임에는 행과 열이 있습니다. re.sub에서 pandas 열에 대해서는 루프를 통해 모든 행을 처리해야합니다. 코드 덩어리는 게시 한 것과 같습니다. 그러나 pandas.str.replace는 루프를 작성하지 않고도 전체 열을 처리 할 수 ​​있습니다. 이것은 과거에 저에게 효과적이었습니다. 그러나 내가 지금 와이트를 사용하고있는 데이터는 800 만 행입니다. 이 라이브러리는이 데이터 양에 맞게 확장 할 수 없습니다. – Enthusiast

+0

@Ehhusiast : 귀하의 요지를 확인하고, 확인해주십시오. 귀하의 '표현'을 올바르게 이해하고 있습니까? – stovfl

관련 문제