Pandas full Dataframe应用于正则表达式函数抛出错误:TypeError:'期望的字符串或类字节对象'

时间:2018-05-16 19:13:06

标签: python pandas

这是我的正则表达式函数:

def parse_repl(df_item):
    for pattern, replacement in d_comp.items():
        df_item = pattern.sub(replacement, df_item)
    return df_item

d_comp是要替换的正则表达式项目的编译字典。

我这样称呼它:

df.apply(parse_repl)
df.to_csv(...)

我还尝试使用applyaxis=0 axis=1,但都没有效果。

错误是这样的:

  

TypeError :('期望的字符串或字节类对象','发生在索引myField')

parse_repl函数的这一行发生错误:

df_item = pattern.sub(replacement, df_item)

大概是因为sub需要一个字节数组。

问题是,如何将df_item转换为sub调用中的工作位置,即更改项目的数据,然后将更改返回主要内容DF原封不动?

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,我尝试在没有给定示例的情况下复制您的问题。

import pandas as pd
import re

df = pd.DataFrame({'x': ['a', 'b', 'c'], 'y': ['q', 'w', 'e']})

d_comp = {
    re.compile('a'): 'new_a',
    re.compile('q'): 'new_q',
}

def parse_repl(df_item):
    for pattern, replacement in d_comp.items():
        df_item = pattern.sub(replacement, df_item)
    return df_item

df.apply(parse_repl)

当使用df.apply时,传递给它的函数应该是一系列的争论,所以很清楚 pattern.sub(replacement, df_item)无法正常工作,因为df_item不是字符串,也不是字节, 这是一个系列。

您可以尝试修复parse_repl以实现目标,但我建议您使用以下内容

In [1]:     import pandas as pd
   ...:     from IPython.display import display
   ...: 
   ...:     df = pd.DataFrame({'x': ['a', 'b', 'c'], 'y': ['q', 'w', 'e']})
   ...:     display('Original')
   ...:     display(df)
   ...: 
   ...:     regex_to_replace = {
   ...:         'a': 'new_a',
   ...:         'q': 'new_q',
   ...:     }
   ...: 
   ...:     for column_name in df:
   ...:         column = df[column_name]
   ...:         for regex_patten, replacement in regex_to_replace.items():
   ...:             column = column.str.replace(regex_patten, replacement)
   ...: 
   ...:         df[column_name] = column
   ...: 
   ...:     display('Replaced')
   ...:     display(df)
   ...: 
   ...: 
'Original'
   x  y
0  a  q
1  b  w
2  c  e
'Replaced'
       x      y
0  new_a  new_q
1      b      w
2      c      e