Python 获取熊猫中带有数字的第一个字符串

Python 获取熊猫中带有数字的第一个字符串,python,pandas,Python,Pandas,我有一个大的数据集,它包含一个像这样的数据框架 CC| WW| 765432 | yqma HH| C1232| uman na| NN| 7830 | man| nnn NN| CC| C1233 | A1000 NN| C12333 | A10 NN| 12333 | A100 我只需要包含数字的第一个值。有时字符串中有一个数字,有时不在同一位置 如何执行此操作?如果所有值都在一列中,请使用: 感谢@moys提供解决方案: df['first'] = df['col'].str.

我有一个大的数据集,它包含一个像这样的数据框架

CC| WW| 765432 | yqma

HH| C1232| uman

na| NN| 7830 | man| nnn

NN| CC| C1233 | A1000

NN| C12333 | A10

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


如何执行此操作?

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

感谢@moys提供解决方案:

df['first'] = df['col'].str.findall(r'(?:[a-zA-Z]?)[\d]+').str[0]
或通过以下方式更改解决方案:

或解决方案表单@Chris A,谢谢:

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


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

感谢@moys提供解决方案:

df['first'] = df['col'].str.findall(r'(?:[a-zA-Z]?)[\d]+').str[0]
或通过以下方式更改解决方案:

或解决方案表单@Chris A,谢谢:

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


假设
|
是列。这可能是一种方法,但可能不是最佳方法。然而,它的优点是初学者容易阅读

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']

假设
|
是列。这可能是一种方法,但可能不是最佳方法。然而,它的优点是初学者容易阅读

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']

表示列?
表示列?这个正则表达式更好
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解决了这个问题,谢谢大家:]这个正则表达式比df['A']更好。
str.findall(r'(?:[A-zA-Z]?)[\d]+')。str[0]
或者
.str.extract(r'(\S*?\d+)
Yes.str.extract(r'(\S*?\d+)有效。我注意到我有一些像M-100的绳子。str.extract解决了问题谢谢大家:]