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

时间:2020-03-05 09:26:06

标签: python pandas

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

CC| WW| 765432 | yqma

HH| C1232| uman

na| NN| 7830 | man| nnn

NN| CC| C1233 | A1000

NN| C12333 | A10

NN| 12333 | A100

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

我该怎么做?

2 个答案:

答案 0 :(得分:2)

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

感谢@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

答案 1 :(得分:0)

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

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