更改DataFrame中函数的值

时间:2016-12-21 16:31:35

标签: python pandas dataframe

我正在尝试创建一个从数据框中的列中删除“#1”的函数:

def formatSignalColumn(df):
    for i,signal in enumerate(df['Signal list']):
        df = df.set_value(i, 'Signal list', signal.replace(" #1", ""))
        df = df.set_value(i, 'Signal list', signal.replace(" #2", ""))
    return df

然而,当我通过它传递我的DataFrame时,它不会改变任何东西。

tlog = formatSignalColumn(tlog)

有趣的是,当我在函数外部运行for循环时,它也不起作用,但是当我专门选择isignal值时,它会起作用...

i = 0
signal = tlog['Signal list'][i]
tlog= tlog.set_value(i, 'Signal list', signal.replace(" #1", ""))
tlog= tlog.set_value(i, 'Signal list', signal.replace(" #2", ""))

这对我没有任何意义。有人有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用矢量化str.replace并传递正则表达式模式,以便在一行中执行此操作:

In [231]:    
df = pd.DataFrame({'something':[' #1blah', ' #2blah', '#3blah']})
df

Out[231]:
  something
0    #1blah
1    #2blah
2    #3blah

In [232]:
df['something'] = df['something'].str.replace(' #1| #2','')
df

Out[232]:
  something
0      blah
1      blah
2    #3blah

你发现的是你在传入的df的副本上操作,另外修改数据对象,因为你重复迭代不是一个好主意。

除此之外,应该总是寻找一个矢量化方法并避免循环,因为循环很少是唯一可用的方法