我有一个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]
答案 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.split
,str.strip
和astype
的另一种解决方案:
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