检索“熊猫数据框”列中列表的最后一个元素

时间:2019-05-27 10:26:29

标签: python pandas dataframe

我有一个csv文件示例:(将此读为AAA项花费1000,而AAA(1)项花费2000)

ColumnName
AAA (1000)
AAA (1) (2000)

我想创建一个包含所有数字的pandas dataframe列

Column_cost
1000
2000

我试图用'('进行拆分,这将返回类似以下的内容(因为第二项的名称中包含'(':

Result 1
Col_1 Col_2 Col_3

AAA 1000) None

AAA   1)  2000)  

所以数字不在同一列

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

Result 2

ColumnName2

[AAA,1000)]

[AAA,1),2000)]

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

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

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

x = df['ColumnName'].str.split('(') gives Result 2 above

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

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

x[0][-1].split()[0]
x[1][-1].split()[0]

2 个答案:

答案 0 :(得分:1)

您可以使用str.extract来匹配括号内的数字,并添加'$'使其仅在字符串末尾匹配:

df.assign(Column_cost = df.ColumnName.str.extract(r'\((\d+)\)$'))

       ColunmName    Column_cost
0      AAA (1000)        1000
1  AAA (1) (2000)        2000

答案 1 :(得分:1)

使用Series.str.splitstr.stripastype的另一种解决方案:

df['Column_cost'] = df.ColumnName.str.split('(').str[-1].str.strip(')').astype(int)

[出]

       ColumnName  Column_cost
0      AAA (1000)         1000
1  AAA (1) (2000)         2000