我需要根据另一列字符串类型的信息在数据帧中创建一个新列。
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获取 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
如果可能的话,这个新列包含整数。
如果所有字符串的格式都相同,您可以使用正则表达式并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
您可以使用以下方法
创建自定义函数并将其应用于数据帧列apply
:
# 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)