【发布时间】:2015-12-10 12:18:18
【问题描述】:
我有一个 pandas 数据框,其中包含一个带有字符串的列(即逗号分隔的子字符串)。我想删除一些子字符串并将剩余的子字符串写入同一数据框中的新列。
我为此编写的代码如下所示:
def remove_betas(df):
for index,row in df.iterrows():
list= row['Column'].split(',')
if 'substring' in list:
list.remove('beta-lactam')
New= (',').join(list)
elif not 'substring' in list:
New= (',').join(Gene_list)
return New
df['NewColumn'].iloc[index]=New
df.apply(remove_betas, axis=1)
当我运行它时,我的新列只包含零。此代码背后的想法是获取 df 中每一行的每个字符串,以逗号将其拆分为子字符串,然后在结果列表中搜索我要删除的子字符串。删除后,我将列表重新组合成一个字符串,并将其写入 df 的新列,与相应行的索引位置相同。
要以所需的方式将生成的子字符串写入新列,我必须进行哪些更改?
编辑
顺便说一句,我曾尝试像 how to compute a new column based on the values of other columns in pandas - python 那样编写 lambda 表达式,但我无法真正弄清楚如何在矢量化函数中执行所有操作。
我也尝试用任何内容替换子字符串(如df.column.replace('x,?', ''),但这不起作用,因为我必须稍后计算列表。因此必须删除子字符串,如list.remove('substring')
【问题讨论】:
-
我用矢量化的方式更新了解决方案。
标签: python pandas dataframe apply