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:
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 BLANK与ONE BLANK,这是无用的。
与Python测试:3.4.2 - 大熊猫:作为或回答,如果这是为你工作发表意见,为什么不0.19.2
回来和标志你的问题。
这是一个循环,不是吗?这正是我为什么使用向量化正则表达式替换整个数据框列的原因。这并不回答我的原始问题。 – Enthusiast
在熊猫数据框中,我们有行和列。在re.sub中,对于一个熊猫列,您必须像循环中的代码块一样逐行处理所有内容。但是,pandas.str.replace可以处理整个列而无需编写循环。这在过去对我有用。然而,我现在使用的数据是800万行。这个库无法扩展这个数据量。 – Enthusiast
@Enthusiast:我明白你的观点,请确认,我是否正确理解你的“表达”。 – stovfl
如果你使用'datt2.My_variable.str.replace(r'\ s +','',inplace = True,regex = True)'? –
@WiktorStribiżew,这个函数没有参数'inplace'或'regex'。我仍然继续前进并执行它,并且错误消息正如所预期的那样:TypeError:replace()得到了一个意外的关键字参数'inplace'' – Enthusiast
这是很多你正在处理的数据吗? – languitar