检索 Panda Dataframe 列中列表的最后一个元素

zay*_*dar 3 python dataframe pandas

我有这个 csv 文件示例:(将其读作 AAA 项的成本为 1000,而 AAA(1) 项的成本为 2000)

ColumnName
AAA (1000)
AAA (1) (2000)
Run Code Online (Sandbox Code Playgroud)

我想创建一个包含所有数字的 Pandas 数据框列

IE

Column_cost
1000
2000
Run Code Online (Sandbox Code Playgroud)

我试图用 '(' 来分割它,它返回如下所示的内容(因为第二个项目的名称中有 '(' :

Result 1
Col_1 Col_2 Col_3

AAA 1000) None

AAA   1)  2000)  
Run Code Online (Sandbox Code Playgroud)

所以数字不在同一列

然后我尝试创建一列列表,它给出

Result 2

ColumnName2

[AAA,1000)]

[AAA,1),2000)]
Run Code Online (Sandbox Code Playgroud)

但同样,我不知道如何创建一个使用每个列表最后一个元素的列。

我可以为特定索引获取它,但不能为整个列获取它

x = df['ColumnName'].str.split('(',expand=True) gives Result 1 above

x = df['ColumnName'].str.split('(') gives Result 2 above
Run Code Online (Sandbox Code Playgroud)

从结果 2 中,我执行以下操作以获得一个特定单元格的所需结果,但我不知道如何为整列执行此操作(我可以对小数据集执行此操作,但不能对大数据集执行此操作)

检索特定索引的列表,获取列表的最后一个元素,用空格分割,然后检索分割列表的新元素

x[0][-1].split()[0]
x[1][-1].split()[0]
Run Code Online (Sandbox Code Playgroud)

Chr*_*s A 5

Another solution using Series.str.split, str.strip and astype:

df['Column_cost'] = df.ColumnName.str.split('(').str[-1].str.strip(')').astype(int)
Run Code Online (Sandbox Code Playgroud)

[out]

       ColumnName  Column_cost
0      AAA (1000)         1000
1  AAA (1) (2000)         2000
Run Code Online (Sandbox Code Playgroud)