我有一个大数据集,其中包含一个像这样的熊猫数据框
CC| WW| 765432 | yqma
HH| C1232| uman
na| NN| 7830 | man| nnn
NN| CC| C1233 | A1000
NN| C12333 | A10
NN| 12333 | A100
我只需要包含数字的第一个值。有时字符串中有一个数字,有时位置不同。
我该怎么做?
答案 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']