nome
Douglas Friedrich custo zero
Ernando custo zero
Lucas Fonseca custo zero
Éverson NA
Juninho Capixaba desconhecido
Zeca desconhecido
Nino Paraíba custo zero
Douglas Borel NA
Elton custo zero
Ronaldo custo zero
Jádson desconhecido
Rodriguinho custo zero
Marco Antônio 120 mil €
Clayson 880 mil €
Rossi custo zero
Gilberto custo zero
Saldanha NA
Anderson NA
Juninho 1.30 milhões €
Wanderson 400 mil €
Ignácio desconhecido
Giovanni custo zero
João Pedro desconhecido
Matheus Silva custo zero
Gregore 235 mil €
Flávio desconhecido
Yuri custo zero
Saldanha NA
Danielzinho custo zero
Alesson desconhecido
Élber 130 mil €
Gustavo NA
Fernandão 1.06 milhões €
Name: preco_pago, dtype: object
我是否可以只将这个序列中的数字元素转换为浮点数(例如:1.30milhóese
),而将其余元素保持不变? 我也想把几千转换成1000,把几百万转换成几百万,1000000。 这就是我实际想要的:1.30milhóese
到1300000
如果我没有理解错的话,您有一个带有字符串的熊猫系列(即,您的第一个元素是字符串'Douglas Friedrich custo Zero'
。
您必须创建自己的函数来解析每个字符串,例如:
def convert_to_number(s):
n = s.split(' ').strip() # work with the right-hand portion only
if 'milhões' in n:
return 1e6 * float(n.split()[0])
if 'mil' in n:
return 1e3 * float(n.split()[0])
if 'zero' in n:
return 0
return np.nan
然后简单的将这个功能应用到你的熊猫系列中:
new_series = series.apply(convert_to_number)
当然,您可能需要根据需要修改该函数,或者使其适应可能出现的任何边缘情况。
您可以使用相当复杂的过滤,但无论如何,pandas列中的dtype是一致的。 我建议根据内容进行过滤,并应用自组织转换。
因此,为了给出一个值为原始值而数为浮点值的数据帧,例如:
import pandas as pd
import numpy as np
data = """\
Douglas Friedrich custo zero
Ernando custo zero
Lucas Fonseca custo zero
Éverson NA
Juninho Capixaba desconhecido
Zeca desconhecido
Nino Paraíba custo zero
Douglas Borel NA
Elton custo zero
Ronaldo custo zero
Jádson desconhecido
Rodriguinho custo zero
Marco Antônio 120 mil €
Clayson 880 mil €
Rossi custo zero
Gilberto custo zero
Saldanha NA
Anderson NA
Juninho 1.30 milhões €
Wanderson 400 mil €
Ignácio desconhecido
Giovanni custo zero
João Pedro desconhecido
Matheus Silva custo zero
Gregore 235 mil €
Flávio desconhecido
Yuri custo zero
Saldanha NA
Danielzinho custo zero
Alesson desconhecido
Élber 130 mil €
Gustavo NA
Fernandão 1.06 milhões €"""
data = pd.Series(
data.split('\n')
).str.replace(
' +', '|'
).str.rsplit(
'|', expand=True
).rename(
columns=dict(zip(range(2), ['who', 'value']))
)
f = data.value.str.contains('milhões €')
data.loc[f, 'num'] = data.loc[f, 'value'].str.split(' ', 1).str[0].apply(float) * 1000000
f = data.value.str.contains('mil €')
data.loc[f, 'num'] = data.loc[f, 'value'].str.split(' ', 1).str[0].apply(float) * 1000