Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除额外空白时出现错误_Python_Regex_Pandas_Memory Management_Bigdata - Fatal编程技术网

Python 删除额外空白时出现错误

Python 删除额外空白时出现错误,python,regex,pandas,memory-management,bigdata,Python,Regex,Pandas,Memory Management,Bigdata,我正在尝试使用命令清除数据框中额外空白的列。该数据框有近800万条记录 datt2.My_variable=datt2.My_variable.str.replace('\s+', ' ') 我最终得到了以下的错误 MemoryError Traceback (most recent call last) <ipython-input-10-158a51cfaa3d> in <module>() ---->

我正在尝试使用命令清除数据框中额外空白的列。该数据框有近800万条记录

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:
MemoryError回溯(最近一次调用)
在()
---->1 datt2.My_variable=datt2.My_variable.str.replace('\s+','')
替换中的c:\python27\lib\site packages\pandas\core\strings.pyc(self、pat、repl、n、case、flags)
1504 def更换(self、pat、repl、n=-1、case=True、flags=0):
1505结果=str\u替换(自.\u数据,pat,repl,n=n,case=case,
->1506标志=标志)
1507返回自包装结果(结果)
1508
str_replace中的c:\python27\lib\site packages\pandas\core\strings.pyc(arr、pat、repl、n、case、flags)
334 f=λx:x.替换(轻拍,替换,n)
335
-->336返回地图(f,arr)
337
338
c:\python27\lib\site packages\pandas\core\strings.pyc在\u-na\u映射中(f,arr,na\u-result,dtype)
152 def_na_映射(f,arr,na_结果=np.nan,dtype=object):
153#真的应该#检查#NA#
-->154返回映射(f,arr,na_掩码=True,na_值=na_结果,dtype=dtype)
155
156
c:\python27\lib\site packages\pandas\core\strings.pyc in_map(f、arr、na_掩码、na_值、dtype)
167尝试:
168转换=不是全部(掩码)
-->169 result=lib.map\u expert\u mask(arr,f,mask.view(np.uint8),convert)
170除了(类型错误、属性错误):
171
pandas.lib.map_-infere_掩码(pandas\lib.c:65837)()中的pandas\src\inference.pyx
pandas.lib.maybe\u convert\u对象中的pandas\src\expression.pyx(pandas\lib.c:56806)()
记忆错误:
问题:我正试图清理数据框中的一列,该列有额外的空白…
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(…)
是一样的,但不复制整个
数据

来自
文件:
Series.str.replace(pat,repl,n=-1,case=True,flags=0)
将序列/索引中出现的pattern/regex替换为其他字符串。
等效于str.replace()或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+”会将一个空白替换为一个空白,这是无用的

用Python:3.4.2测试-熊猫:0.19.2

返回并将您的问题标记为已回答,如果这对您有效,或者说明原因。

如果您使用
datt2.My_variable.str.replace(r'\s+','',inplace=True,regex=True)
?@WiktorStribiżew,此函数中没有参数'inplace'或'regex'。我仍然继续执行它,这次的错误消息是
TypeError:replace()得到了一个意外的关键字参数'inplace'
这是一个循环,不是吗?这正是我使用向量化形式的正则表达式替换整个数据帧列的原因。这并没有回答我最初的问题。在熊猫数据框架中,我们有行和列。在re.sub中,对于pandas列,您必须通过循环逐行处理所有内容,就像您发布的代码块一样。但是,pandas.str.replace可以处理整个列,而无需编写循环。这在过去对我很有效。然而,我现在使用的数据是800万行。此库无法缩放此数量的数据。@爱好者:我明白你的意思,请验证,我是否正确理解你的
表达式。你所说的“表达式”是什么意思?我只想一次清理列中的所有单元格。发烧友:我已经更新了我的答案,用
表达式
来表达我的意思。