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
无论如何,我是否只能将该系列的数字元素转换为float(ex:1.30 milhões €
),而其余部分保持原样?我还想将数千转换为1000,将百万转换为百万1000000。这是我真正想要的:1.30 milhões €
至1300000
答案 0 :(得分:0)
如果我理解正确,那么您的熊猫系列带有字符串(即,您的第一个元素是字符串'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)
当然,您可能需要根据需要修改功能,或使其适应可能出现的任何情况。
答案 1 :(得分:0)
您可以进行非常复杂的过滤,但是无论如何,pandas列中的dtype是一致的。我建议根据内容进行过滤,并应用即席转换。
因此,为了给出一个数据帧,其值是原始的,而num是浮点的,例如:
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