【问题标题】:Changing values of a function within a DataFrame [duplicate]在 DataFrame 中更改函数的值 [重复]
【发布时间】:2016-12-21 16:31:35
【问题描述】:

我正在尝试创建一个从数据框中的列中删除“#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", ""))

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

【问题讨论】:

  • 你可以做df['Signal list']=df['Signal list'].str.replace(' #1| #2','')
  • 这里的问题是您在迭代时正在修改数据,所以看起来您正在处理副本。

标签: python pandas dataframe


【解决方案1】:

您可以只使用矢量化的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 的副本进行操作,在迭代时另外修改数据对象并不是一个好主意。

除此之外,应始终寻求矢量化方法并避免循环,因为循环很少是唯一可用的方法

【讨论】:

  • 啊,谢谢你的澄清!
  • 不用担心,如果我的回答解决了您的问题,请不要忘记接受它,这样它就不会一直无人回答
猜你喜欢
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 2014-05-12
  • 2016-06-28
  • 1970-01-01
  • 2011-09-17
相关资源
最近更新 更多