我有这个 csv 文件示例:(将其读为项目 AAA 成本 1000,项目 AAA(1) 成本 2000)
ColumnName
AAA (1000)
AAA (1) (2000)
我想创建所有数字的 pandas 数据框列
即
Column_cost
1000
2000
我尝试拆分this by '(' 返回类似以下内容的内容(因为第二个项目的名称中有 '(':
Result 1
Col_1 Col_2 Col_3
AAA 1000) None
AAA 1) 2000)
所以数字不在同一列中
然后我尝试创建一列列表,其中给出| ||但同样,我不知道如何创建一个使用每个列表的最后一个元素的列。
Result 2
ColumnName2
[AAA,1000)]
[AAA,1),2000)]
我可以为特定索引获取它,但不能为整个列获取它
从结果 2 中,我执行以下操作以获得一个特定单元格的所需结果,但我不知道如何对整个列执行此操作(我可以对小数据集执行此操作,但不能对大数据集执行此操作)
x = df['ColumnName'].str.split('(',expand=True) gives Result 1 above
x = df['ColumnName'].str.split('(') gives Result 2 above
检索列表特定索引的,获取列表的最后一个元素,将其按空格分割,然后检索分割列表的新元素
retrieves the list of a particular index, gets the last element of the list, splits it by spaces, and then retrieves the new element of the split list
x[0][-1].split()[0]
x[1][-1].split()[0]
可以使用
str.extract
并使用正则表达式来提取括号内的最后一个数字:
import pandas as pd
df = pd.DataFrame({'ColumnName': ['AAA (1000)', 'AAA (1) (2000)']})
df['Column_cost'] = df['ColumnName'].str.extract(r'\((\d+)\)\s*$').astype(int)
print(df)
这将给出:
ColumnName Column_cost
0 AAA (1000) 1000
1 AAA (1) (2000) 2000
以下是代码的工作原理:
-
str.extract(r'\((\d+)\)\s*$')
: -
\((\d+)\)
: 此正则表达式查找由文字括号(
和)
包围的一个或多个数字\d+
。括号内的部分(\d+)
是一个捕获组,这意味着我们只想提取此部分(数字)。 -
\s*$
: 这匹配字符串末尾的零个或多个空格字符\s*
。这确保我们获得最后一个括号内的数字。 -
.astype(int)
: 这将从正则表达式提取的字符串值转换为整数。
这种方法高效地搜索的字符串并仅提取所需的数字,使其成为大型数据集的合适解决方案。
标签:python,pandas,dataframe From: 56324232