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