是Python的新手,正在处理数据操作
我有一个数据框
df3
Out[22]:
Breed Lifespan
0 New Guinea Singing Dog 18
1 Chihuahua 17
2 Toy Poodle 16
3 Jack Russell Terrier 16
4 Cockapoo 16
.. ... ...
201 Whippet 12--15
202 Wirehaired Pointing Griffon 12--14
203 Xoloitzcuintle 13
204 Yorkie--Poo 14
205 Yorkshire Terrier 14--16
正如您在上面观察到的,某些寿命在14--16之间。 [寿命]的数据类型为
type(df3['Lifespan'])
Out[24]: pandas.core.series.Series
我希望它反映这两个数字的平均值,即15。我不希望有任何范围。只是个位数的平均值。我该怎么做?
让我们来做findall
和explode
s=df.Lifespan.str.findall('\d+').explode().astype(float).mean(level=0)
0 18.0
1 17.0
2 16.0
3 16.0
4 16.0
201 13.5
202 13.0
203 13.0
204 14.0
205 15.0
Name: Lifespan, dtype: float64
df['Life_new']=s
使用split
和expand=True
df = pd.DataFrame({'Breed': ['Dog1', 'Dog2'],
'Lifespan': [12, '14--15']})
df['Lifespan'] = (df['Lifespan']
.astype(str).str.split('--', expand=True)
.astype(float).mean(axis=1)
)
df
# Breed Lifespan
# 0 Dog1 12.0
# 1 Dog2 14.5