values replacing example data columna column agregar python database pandas

python - replacing - Pandas: ¿cómo cambiar todos los valores de una columna?



replace values dataframe column pandas (2)

Tengo un marco de datos con una columna llamada "Date" y quiero que todos los valores de esta columna tengan el mismo valor (solo el año). Ejemplo:

City Date Paris 01/04/2004 Lisbon 01/09/2004 Madrid 2004 Pekin 31/2004

Lo que quiero es:

City Date Paris 2004 Lisbon 2004 Madrid 2004 Pekin 2004

Aquí está mi código:

fr61_70xls = pd.ExcelFile(''AMADEUS FRANCE 1961-1970.xlsx'') #Here we import the individual sheets and clean the sheets years=([''1961'',''1962'',''1963'',''1964'',''1965'',''1966'',''1967'',''1968'',''1969'',''1970'']) fr={} header=([''City'',''Country'',''NACE'',''Cons'',''Last_year'',''Op_Rev_EUR_Last_avail_yr'',''BvD_Indep_Indic'',''GUO_Name'',''Legal_status'',''Date_of_incorporation'',''Legal_status_date'']) for year in years: # save every sheet in variable fr[''1961''], fr[''1962''] and so on fr[year]=fr61_70xls.parse(year,header=0,parse_cols=10) fr[year].columns=header # drop the entire Legal status date column fr[year]=fr[year].drop([''Legal_status_date'',''Date_of_incorporation''],axis=1) # drop every row where GUO Name is empty fr[year]=fr[year].dropna(axis=0,how=''all'',subset=[[''GUO_Name'']]) fr[year]=fr[year].set_index([''GUO_Name'',''Date_of_incorporation''])

Ocurre que en mis DataFrames, llamado por ejemplo fr[''1961''] los valores de Date_of_incorporation pueden ser cualquier cosa (cadenas, enteros, etc.), así que tal vez sería mejor borrar completamente esta columna y luego adjuntar otra columna con solo el año para los DataFrames?


Como señala @DSM, puedes hacer esto de forma más directa usando los métodos de cadenas vectorizadas :

df[''Date''].str[-4:].astype(int)

O usando extracto (suponiendo que solo hay un conjunto de dígitos de longitud 4 en algún lugar de cada cadena):

df[''Date''].str.extract(''(?P<year>/d{4})'').astype(int)

Una manera alternativa un poco más flexible, podría ser usar apply (o map equivalente) para hacer esto:

df[''Date''] = df[''Date''].apply(lambda x: int(str(x)[-4:])) # converts the last 4 characters of the string to an integer

La función lambda está tomando la entrada de la Date y convirtiéndola en un año.
Podrías (y tal vez deberías) escribir esto más detalladamente como:

def convert_to_year(date_in_some_format); date_as_string = str(date_in_some_format) year_as_string = date_in_some_format[-4:] # last four characters return int(year_as_string) df[''Date''] = df[''Date''].apply(convert_to_year)

Quizás ''Year'' sea un mejor nombre para esta columna ...


Puede hacer una transformación de columna mediante el uso de apply

Defina una función de limpieza para eliminar el dólar y las comas y convierta sus datos a flotación.

def clean(x): x = x.replace("$", "").replace(",", "").replace(" ", "") return float(x)

Luego, llámalo en tu columna de esta manera.

data[''Revenue''] = data[''Revenue''].apply(clean)