【问题标题】:Retrieving the last element of a list in Panda Dataframe column检索 Panda Dataframe 列中列表的最后一个元素
【发布时间】:2019-05-27 10:26:29
【问题描述】:

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

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

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

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]

【问题讨论】:

  • @yatu,抱歉,是的,谢谢它的工作(我认为我的赞成票不算数,因为我是新用户),但是,因为我还是新手,我更喜欢使用另一个方法,因为它是我的代码的一个小变化,再次感谢

标签: python pandas dataframe


【解决方案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

【讨论】:

  • 谢谢克里斯,工作(不知何故 astype(int) 对我不起作用,所以我使用 apply(pd.to_numeric,errors='coerce') 代替,如果你知道原因,请告诉我,但现在一切正常。
  • 很可能是由于最后一对括号之间的非数字字符。也许是逗号、句号或货币符号..?例如[, . $]
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-02
    • 2018-03-10
    • 2011-05-04
    • 2010-11-13
    • 2022-01-07
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    相关资源
    最近更新 更多