如何拆分Pandas数据框中列的值?

时间:2017-12-11 12:03:28

标签: python pandas dataframe

我有以下数据框和&我想操纵TypeName列中的值,使其仅包含括号开始之前的部分

    DeviceName      DispName     TypeName
0   TYZ:SB_INCOMING Incoming      Incoming(TYZ:SB_INCOMING)
1   TYZ:SB_SECTION  Add Section   TYZ:SB_SECTION
2   TYZ:SB_FDR_WL   WL            Main(TYZ:SB_FDR_WL)
3   TYZ:SB_VLMCCB   MCCB          Main(TYZ:SB_VLMCCB)
4   TYZ:SB_FDR_BPS  BPS           Main(TYZ:SB_FDR_BPS)

我试过这个

doc_df.TypeName, doc2= doc_df.TypeName.str.split("(")[0]

这样做是为TypeName列的数据框中的所有行设置相同的值。有人可以指出错误

我得到的当前输出是

    DeviceName      DispName     TypeName
0   TYZ:SB_INCOMING Incoming      Incoming
1   TYZ:SB_SECTION  Add Section   Incoming
2   TYZ:SB_FDR_WL   WL            Incoming
3   TYZ:SB_VLMCCB   MCCB          Incoming
4   TYZ:SB_FDR_BPS  BPS           Incoming

预期

    DeviceName      DispName     TypeName
0   TYZ:SB_INCOMING Incoming      Incoming
1   TYZ:SB_SECTION  Add Section   TYZ:SB_SECTION
2   TYZ:SB_FDR_WL   WL            Main
3   TYZ:SB_VLMCCB   MCCB          Main
4   TYZ:SB_FDR_BPS  BPS           Main

1 个答案:

答案 0 :(得分:0)

使用str[0]选择列表的第一个值:

doc_df['TypeName'] = doc_df.TypeName.str.split("(").str[0]
print (doc_df)
        DeviceName     DispName        TypeName
0  TYZ:SB_INCOMING     Incoming        Incoming
1   TYZ:SB_SECTION  Add Section  TYZ:SB_SECTION
2    TYZ:SB_FDR_WL           WL            Main
3    TYZ:SB_VLMCCB         MCCB            Main
4   TYZ:SB_FDR_BPS          BPS            Main

因为省略它会得到分割TypeName列的第一个值:

print (doc_df.TypeName.str.split("("))
0    [Incoming, TYZ:SB_INCOMING)]
1                [TYZ:SB_SECTION]
2          [Main, TYZ:SB_FDR_WL)]
3          [Main, TYZ:SB_VLMCCB)]
4         [Main, TYZ:SB_FDR_BPS)]
Name: TypeName, dtype: object

print (doc_df.TypeName.str.split("(")[0])
['Incoming', 'TYZ:SB_INCOMING)']