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

时间:2019-04-09 17:43:33

标签: python pandas

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

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

,并在可能的情况下,此新列包含整数。

2 个答案:

答案 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)