我试图在Pandas系列中的索引中进行字符串替换。但是,目前它不匹配或找到子字符串并用给定值替换它。
我目前的系列:
index
@12456 string_1
@54324 string_2
@34566 string_3
@57453 string_4
@67645 string_5
Name: value, dtype: object
对此,我正在尝试删除' @'从索引值中签名。
我正在使用:
series.replace(to_replace={'index': {'@': ''}})
然而,它似乎与子串匹配并返回初始系列。我错过了什么,我将如何达到预期的结果?
我的熊猫版目前为0.15。
P.S。我也尝试过:
series.replace(to_replace={'index': {r'@': ''}})
series.replace(to_replace={'index': {r'\@': ''}})
有些答案正在解决具体问题,但我需要一个更一般的案例。所以,如果系列是:
index other_index
@12456 1 string_1
@54324 2 string_2
@34566 3 string_3
@57453 4 string_4
@67645 5 string_5
Name: value, dtype: object
如何在此处对索引应用相同的操作?哪个适用于第一项措施和另一项措施?
答案 0 :(得分:1)
您可以执行以下操作:
series.index = series.index.map(lambda v: v.replace('@', ''))
或
series.index = series.index.str.replace('@', '')
对于多索引,这是一个可能的解决方案(虽然不是很漂亮):
# setting up the indices and the series
arrays = [['@str1', '@str2'], [1, 2]]
ind = pd.MultiIndex.from_arrays(arrays, names=['index', 'other_index'])
series = pd.Series(['s1', 's2'], index=ind)
# index other_index
# @str1 1 s1
# @str2 2 s2
# dtype: object
vals = zip(*series.index.get_values()) ## values of indices reshaped into a list of tuples
# [('@str1', '@str2'), (1L, 2L)]
# find out where is the index that we want to change
pos = series.index.names.index('index')
# now we can modify the tuple by replacing the strings we do not want
vals[pos] = tuple([x.replace('@', '') for x in vals[pos]])
# Re-create the multi-index
series.index = pd.MultiIndex.from_arrays(vals, names=series.index.names)
print series
# index other_index
# str1 1 s1
# str2 2 s2
# dtype: object