如何创建一个新列,读取另一列中的字符串的一部分并将其转换为整数



我需要根据另一列字符串类型的信息在数据帧中创建一个新列。

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)

最新更新