2017-05-19 2 views
0

Ich habe 2 Datenrahmen. Unten ist, wie Daten wiestr.replace unsymmetrische Klammerfehler in Pandas Datenrahmen

Finden enter image description here

ersetzen enter image description here

für jeden keyword in current_title Ich suche aussehen und wenn ich finde es gegen die entsprechenden keywordLength im Find am ersetzen Datenrahmen. Unten ist mein Code.

import pandas as pd 
df_find = pd.read_csv(input_path_find) 
df_replace = pd.read_csv(input_path_replace) 

#replace 
for i in range(df_replace.shape[0]): 
    df_find.current_title=df_find.current_title.str.replace(df_replace.keyword.loc[i],df_replace.keywordLength.loc[i],case=False) 

jedoch, wenn ich den Code ausführen, ich bin unten Fehler immer

error          Traceback (most recent call last) 
<ipython-input-13-134bbf2a1cb4> in <module>() 
     1 for i in range(df_replace.shape[0]): 
----> 2  df_find.current_title=df_find.current_title.str.replace(df_replace.keyword.loc[i],df_replace.keywordLength.loc[i],case=False) 

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) 
    326   if not case: 
    327    flags |= re.IGNORECASE 
--> 328   regex = re.compile(pat, flags=flags) 
    329   n = n if n >= 0 else 0 
    330 

c:\python27\lib\re.pyc in compile(pattern, flags) 
    192 def compile(pattern, flags=0): 
    193  "Compile a regular expression pattern, returning a pattern object." 
--> 194  return _compile(pattern, flags) 
    195 
    196 def purge(): 

c:\python27\lib\re.pyc in _compile(*key) 
    249   p = sre_compile.compile(pattern, flags) 
    250  except error, v: 
--> 251   raise error, v # invalid expression 
    252  if not bypass_cache: 
    253   if len(_cache) >= _MAXCACHE: 

error: unbalanced parenthesis 

Jede Hilfe?

Edit: Fehler erscheint, wenn str(df_replace.keywordLength.loc[i]) Werte hat eine der (*)+[\ Sonderzeichen

+0

Was ist in 'df_replace.keywordLength.loc [i]'? –

+0

Es ist in der Tabelle Ersetzen. zweite Spalte. Es hat die Länge des Textkorpus von der vorherigen Spalte. Zahlen, um genau zu sein – Enthusiast

+0

So war ich nicht in der Lage, den Fehler ohne Quelldaten zu duplizieren, aber da es '.str.replace' ist und sie Zahlen sind, haben Sie versucht' str (df_replace.keywordLength.loc [i ]) 'für Ihren Wiederbeschaffungswert? Oder '.replace', ohne' .str'? – EFT

Antwort

0

str.replace ist ein regulärer Ausdruck als erstes Argument erwartet. Sie müssen die Musterzeichenfolge scape, bevor es zu str.replace vorbei:

import pandas as pd 
import re 
df_find = pd.read_csv(input_path_find) 
df_replace = pd.read_csv(input_path_replace) 

#replace 
for i in range(df_replace.shape[0]): 
     df_find.current_title = df_find.current_title.str.replace(
      re.scape(df_replace.keyword.loc[i]), 
      df_replace.keywordLength.loc[i], 
      case=False 
     )