【问题标题】:Extract the largest number from a dataframe column containing strings [duplicate]从包含字符串的数据框列中提取最大数[重复]
【发布时间】:2026-01-25 17:15:02
【问题描述】:

我有一个 pandas 数据框,其中包含从 csv 文件中提取的列。其中一列包含包含特定数字的字符串,我想提取。它显示了一个TypeError,我认为这是因为列的对象数据类型,但在提取工作期间设置列的数据类型也没有,astype 在特定列上也没有工作。早些时候,我从 Excel 文件中提取了相同的列,并且正则表达式对其进行了处理,没问题。

工作头如下:

  Transaction Date                                        PARTICULARS DEPOSITS WITHDRAWALS Amount Dr/Cr  Calc_Amount  Calc RRN Number RRN-AMT
0       2019-05-30              UPI/914923281641/UPI/raghu.m.v2016@o/        0       32.86  32.86    Dr        32.86     914923281641    0100
1       2019-05-30              UPI/915000512028/UPI/hemanth1999kuma/        0        0.95   0.95    Dr         0.95     915000512028    0100
2       2019-05-30          UPI/RVSL915000512028/UPI/hemanth1999kuma/     0.95           0   0.95    Cr        -0.95     915000512028    0100
3       2019-05-30  UPI/914923451855/UPI/tpmanzoor55@okh/Federal Bank     1.19           0   1.19    Cr        -1.19     914923451855    0100
4       2019-05-30              UPI/914923339262/UPI/ravimaurya8735@/        0        0.94   0.94    Dr         0.94     914923339262    0100

从此代码:

for i, row in bank_statement_30May.iterrows():
    result = [e for e in re.split("[^0-9]",row[1]) if e != '']
    bank_statement_30May.loc[i,"Calc RRN Number"] = max(map(int,result))

这是第二个代码的错误:

    result = [e for e in re.split("[^0-9]",row[1]) if e != '']
  File "C:\Users\Suraj Joshi\AppData\Local\Programs\Python\Python37\lib\re.py", line 213, in split
    return _compile(pattern, flags).split(string, maxsplit)
TypeError: cannot use a string pattern on a bytes-like object

【问题讨论】:

  • 对不起,不清楚,不,我只想要里面的数字,因为你可以看到有时 UPI 之间的东西还有其他东西。我只想要在第一个代码块的最右边可以看到的数字。无论如何,我认为这些将是最大的数字,所以我使用了这个逻辑。
  • 好的,所以你已经有了一个数据最大的列,现在你想用Calc RRN Number 列做什么?
  • 没什么,我只是想要那个专栏。我没有“已经”拥有它,因为这只是我正在处理的示例数据。我还有其他 csv 文件要处理,但如果它不适用于示例,那么它不适用于其中任何一个。
  • 所以df['new_col']=df.PARTICULARS.str.extract('(\d+)',expand=False) ?
  • 是的,它工作正常。谢谢!

标签: python regex pandas dataframe typeerror


【解决方案1】:

你的意思是?:

bank_statement_30May['Calc RRN Number'] = bank_statement_30May['Calc RRN Number'].astype(str).applymap(lambda x: int(max(x, key=int)))

【讨论】:

  • 是的,这对我没有任何改变。我阅读了一些其他答案,建议我更改为 ('str') 但这也不起作用。我不想将 Calc RRN Number 更改为字符串,我想将 PARTICULARS 更改为字符串,以便正则表达式不显示 typeerror
  • @SurajJoshi 在这行之后做:print(bank_statement_30May)