【问题标题】:Get the first string with numbers in pandas获取熊猫中第一个带有数字的字符串
【发布时间】:2020-03-05 17:54:18
【问题描述】:

我有一个大型数据集,其中包含一个像这样的 pandas 数据框

CC| WW| 765432 | yqma

HH| C1232| uman

na| NN| 7830 | man| nnn

NN| CC| C1233 | A1000

NN| C12333 | A10

NN| 12333 | A100

我只需要第一个包含数字的值。有时与字符串有一个数字,有时不在同一位置。

我该怎么做?

【问题讨论】:

  • | 表示列?

标签: python pandas


【解决方案1】:

如果所有值都在一列中,则使用:

感谢@moys 的解决方案:

df['first'] = df['col'].str.findall(r'(?:[a-zA-Z]?)[\d]+').str[0]

或通过更改this解决:

pat = r'[A-Za-z]+[\d]+[\w]*|[\d]+[A-Za-z]+[\w]*|[\d]+[\w]*'
df['first'] = df['col'].str.findall(pat).str[0]

或者解决方法@Chris A,谢谢:

df['first'] = df['col'].str.extract(r'(\S*?\d+)')

print (df)
                       col   first
0    CC| WW| 765432 | yqma  765432
1          HH| C1232| uman   C1232
2  na| NN| 7830 | man| nnn    7830
3    NN| CC| C1233 | A1000   C1233
4         NN| C12333 | A10  C12333
5         NN| 12333 | A100   12333

【讨论】:

  • 这个正则表达式更好df['A'].str.findall(r'(?:[a-zA-Z]?)[\d]+').str[0]
  • 或者.str.extract(r'(\S*?\d+)')
  • 是的 .str.extract(r'(\S*?\d+)') 工作。我注意到我有一些像 M-100 这样的字符串。 str.extract 解决了这个问题谢谢大家:]
【解决方案2】:

假设| 是列。这将是一种方法,但可能不是最佳方法。但是,它的优点是对于初学者来说很容易阅读。

import pandas as pd

NUMBERS = set([str(i) for i in range(10)])

df = pd.DataFrame([
               ['CC', 'WW', '765432' , 'yq5ma'],
               ['HH', 'C1232', 'uman'],
               ['na', 'NN', '7830' , 'man', 'nnn']
])
values = []
for i in df.index:
  for value in df.iloc[i]:
    if value and True in [c in value for c in NUMBERS]:
      values.append(value)
      break
print(values) # Outputs ['765432', 'C1232', '7830']

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 2021-12-06
    • 2021-07-16
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多