我需要根据有关字符串类型另一列的信息在数据框中创建一个新列。
dataframe name= total_data
class,name
a, C-FRA_FRA-S18_FU_L_FUS_FR073_STR001-STR00
b, C-FRA_FRA-S18_FU_L_FUS_FR074_STR010-STR011
我尝试使用find()方法,但它不起作用,我获得了新列total_data.Frame的nan值
total_data["Frame"]=total_data.name.str[total_data.name.str.find("FR0"):total_data.name.str.find("_STR")]
使用上面的代码,我获得了一个仅包含nan
值的新列
我想在数据框中添加一个新列,如下所示:
class,name, Frame
a,C-FRA_FRA-S18_FU_L_FUS_FR073_STR001-STR001,73
b,C-FRA_FRA-S18_FU_L_FUS_FR074_STR010-STR011,74
,并在可能的情况下,此新列包含整数。
答案 0 :(得分:1)
如果所有字符串都采用相同的格式,则可以像下面这样使用正则表达式和str.extract
:
df['Frame'] = df['name'].str.extract(r"FR0(\d+)_STR").astype(int)
# class name Frame
# 0 a C-FRA_FRA-S18_FU_L_FUS_FR073_STR001-STR00 73
# 1 b C-FRA_FRA-S18_FU_L_FUS_FR074_STR010-STR011 74
答案 1 :(得分:0)
您可以使用apply
创建一个自定义函数并将其应用于DataFrame列:
# Example set-up:
df = pd.DataFrame(data={"class":["a", "b"],
"name":["C-FRA_FRA-S18_FU_L_FUS_FR073_STR001-STR00",
"C-FRA_FRA-S18_FU_L_FUS_FR074_STR010-STR011"]})
# Solution:
def str_func(s):
ix1 = s.find("FR0")+3
ix2 = s.find("_STR")
return s[ix1:ix2]
df["Frame"] = df["name"].apply(str_func).astype(int)