这是我的正则表达式函数:
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(...)
我还尝试使用apply
和axis=0
axis=1
,但都没有效果。
错误是这样的:
TypeError :('期望的字符串或字节类对象','发生在索引myField')
parse_repl函数的这一行发生错误:
df_item = pattern.sub(replacement, df_item)
大概是因为sub
需要一个字节数组。
问题是,如何将df_item
转换为sub
调用中的工作位置,即更改项目的数据,然后将更改返回主要内容DF原封不动?
谢谢!
答案 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