preloader

Valores faltantes

Índice de contenido

Es común encontrar valores faltantes en los conjuntos de datos, los cuales suelen expresarse como “NaN” (“Not a Number”) o como “NA” (“Not Available”), aunque también pueden aparecer de otras maneras (“NaT” para “Not a Time”, “None”, etc.). Muchas librerías de aprendizaje automático requieren datos completos, sin valores vacíos. Por ello, es muy importante aprender a detectarlos y, sobre todo, aprender a rellenarlos o eliminarlos cuando sea necesario.

En pandas, los NaN se interpretan como valores de tipo float, por lo que una columna de enteros con al menos un NaN, se transformará en una columna de tipo float.

python
import pandas as pd
python
mydf = pd.read_csv("C:/Users/user/Desktop/dow_jones_index.data", parse_dates = True)
mydf.head(20)

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.792670NaNNaN$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.4284901.380223239655616.0$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.470660-43.024959242963398.0$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.6383109.355500138428495.0$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.9332501.987452151379173.0$17.33$17.370.230814970.175029
51AA2/11/2011$17.33$17.48$16.97$17.371146912790.230814-25.712195154387761.0$17.39$17.28-0.632547900.172712
61AA2/18/2011$17.39$17.68$17.28$17.2880023895-0.632547-30.226696114691279.0$16.98$16.68-1.766780830.173611
71AA2/25/2011$16.98$17.15$15.96$16.68132981863-1.76678066.17769480023895.0$16.81$16.58-1.368230760.179856
81AA3/4/2011$16.81$16.94$16.13$16.58109493077-1.368230-17.663150132981863.0$16.58$16.03-3.317250690.180941
91AA3/11/2011$16.58$16.75$15.42$16.03114332562-3.3172504.419900109493077.0$15.95$16.111.003130620.187149
101AA3/18/2011$15.95$16.33$15.43$16.111303741081.00313014.030601114332562.0$16.38$17.094.334550550.186220
111AA3/25/2011$16.38$17.24$16.26$17.09955503924.334550-26.710607130374108.0$17.13$17.471.984820480.175541
121AXP1/7/2011$43.30$45.60$43.11$44.36451020422.448040NaNNaN$44.20$46.254.638010890.405771
131AXP1/14/2011$44.20$46.25$44.01$46.25259137134.638010-42.54425845102042.0$46.03$46.00-0.065175820.389189
141AXP1/21/2011$46.03$46.71$44.71$46.0038824728-0.06517549.82309925913713.0$46.05$43.86-4.755700750.391304
151AXP1/28/2011$46.05$46.27$43.42$43.8651427274-4.75570032.46010138824728.0$44.13$43.82-0.702470680.410397
161AXP2/4/2011$44.13$44.23$43.15$43.8239501680-0.702470-23.18924051427274.0$43.96$46.756.346680610.410771
171AXP2/11/2011$43.96$46.79$43.88$46.75437469986.34668010.74718339501680.0$46.42$45.53-1.917280540.385027
181AXP2/18/2011$46.42$46.93$45.53$45.5328564910-1.917280-34.70429743746998.0$44.94$43.53-3.137520470.395344
191AXP2/25/2011$44.94$45.12$43.01$43.5339654146-3.13752038.82118328564910.0$43.73$43.72-0.022868400.413508
python
mydf.dtypes
quarter                                 int64
stock                                  object
date                                   object
open                                   object
high                                   object
low                                    object
close                                  object
volume                                  int64
percent_change_price                  float64
percent_change_volume_over_last_wk    float64
previous_weeks_volume                 float64
next_weeks_open                        object
next_weeks_close                       object
percent_change_next_weeks_price       float64
days_to_next_dividend                   int64
percent_return_next_dividend          float64
dtype: object

Detectar valores faltantes

¿Hay algún NaN en el DataFrame?

El siguiente código devuelve “True” si existe algún NaN en nuestro DataFrame:

python
mydf.isnull().values.any()
True

¿En qué columnas hay NaN?

Para saber en qué columnas se encuentran los NaN podemos hacer:

python
mydf.isnull().any()
quarter                               False
stock                                 False
date                                  False
open                                  False
high                                  False
low                                   False
close                                 False
volume                                False
percent_change_price                  False
percent_change_volume_over_last_wk     True
previous_weeks_volume                  True
next_weeks_open                       False
next_weeks_close                      False
percent_change_next_weeks_price       False
days_to_next_dividend                 False
percent_return_next_dividend          False
dtype: bool

¿Cuántos NaN hay en cada columna?

Para conocer el número de NaN que hay en cada columna:

python
mydf.isnull().sum()
quarter                                0
stock                                  0
date                                   0
open                                   0
high                                   0
low                                    0
close                                  0
volume                                 0
percent_change_price                   0
percent_change_volume_over_last_wk    30
previous_weeks_volume                 30
next_weeks_open                        0
next_weeks_close                       0
percent_change_next_weeks_price        0
days_to_next_dividend                  0
percent_return_next_dividend           0
dtype: int64

¿Cuántos NaN hay en total?

python
mydf.isnull().sum().sum()
60

Extracción de filas con NaN

python
nan_rows = mydf[mydf.isnull().any(1)]
nan_rows

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.792670NaNNaN$16.71$15.97-4.428490260.182704
121AXP1/7/2011$43.30$45.60$43.11$44.36451020422.448040NaNNaN$44.20$46.254.638010890.405771
241BA1/7/2011$66.15$70.10$66.00$69.38362581204.882840NaNNaN$69.42$70.070.936330330.605362
361BAC1/7/2011$13.85$14.69$13.80$14.2514534386392.888090NaNNaN$14.17$15.257.621740540.070175
481CAT1/7/2011$94.38$94.81$92.30$93.7324135903-0.688705NaNNaN$93.21$94.010.858277110.469433
601CSCO1/7/2011$20.45$21.00$20.38$20.973035458782.542790NaNNaN$20.94$21.211.289400810.286123
721CVX1/7/2011$91.66$92.48$90.27$91.1935556288-0.512765NaNNaN$90.95$92.832.067070380.789560
841DD1/7/2011$50.05$50.54$49.28$49.7627658789-0.579421NaNNaN$48.30$49.803.105590350.823955
961DIS1/7/2011$37.74$40.00$37.62$39.45729176214.531000NaNNaN$39.01$39.290.7177653361.013940
1081GE1/7/2011$18.49$18.72$18.12$18.43280146510-0.324500NaNNaN$18.61$18.821.128430380.759631
1201HD1/7/2011$35.20$35.57$34.18$34.3856576860-2.329550NaNNaN$34.16$35.895.064400600.727167
1321HPQ1/7/2011$42.22$45.39$42.22$45.091000207246.797730NaNNaN$44.86$46.253.098530660.177423
1441IBM1/7/2011$147.21$148.86$146.64$147.93234928430.489097NaNNaN$147.00$150.002.040820320.439397
1561INTC1/7/2011$21.01$21.21$20.27$20.66386719626-1.665870NaNNaN$20.71$21.081.786580270.871249
1681JNJ1/7/2011$62.63$63.54$62.53$62.6057774737-0.047900NaNNaN$62.29$62.550.417402490.862620
1801JPM1/7/2011$43.00$44.95$42.64$43.642345478851.488370NaNNaN$43.27$44.913.790150870.572869
1921KRFT1/7/2011$31.76$31.76$31.14$31.1944971770-1.794710NaNNaN$30.91$31.341.391140810.929785
2041KO1/7/2011$65.88$65.88$62.56$62.9259802189-4.493020NaNNaN$62.70$63.130.685805630.746980
2161MCD1/7/2011$77.10$77.59$73.59$74.3785400677-3.540860NaNNaN$74.25$74.06-0.255892490.820223
2281MMM1/7/2011$86.75$87.90$85.63$86.2316166921-0.599424NaNNaN$85.70$88.102.800470400.637829
2401MRK1/7/2011$36.29$37.35$35.85$37.35727604872.920910NaNNaN$37.26$34.23-8.132040631.017400
2521MSFT1/7/2011$28.05$28.85$27.77$28.603286461541.960780NaNNaN$28.20$28.300.354610390.559441
2641PFE1/7/2011$17.70$18.38$17.62$18.343868047893.615820NaNNaN$18.22$18.340.658617261.090510
2761PG1/7/2011$64.39$65.08$64.00$64.50523233520.170834NaNNaN$64.40$65.531.754660120.744186
2881T1/7/2011$29.68$30.10$28.66$28.85157834347-2.796500NaNNaN$28.54$28.43-0.385424301.490470
3001TRV1/7/2011$56.09$56.34$52.88$53.3320010115-4.920660NaNNaN$53.12$54.632.842620600.675042
3121UTX1/7/2011$79.19$79.75$78.40$79.0815797841-0.138906NaNNaN$78.27$79.081.034880400.543753
3241VZ1/7/2011$36.06$37.70$35.41$35.93141938064-0.360510NaNNaN$36.55$35.46-2.982220891.363760
3361WMT1/7/2011$54.23$55.07$53.76$54.0864231179-0.276600NaNNaN$53.65$54.812.162160610.684172
3481XOM1/7/2011$73.72$75.90$73.64$75.591017409332.536630NaNNaN$75.13$77.843.607080520.582088
python
len(nan_rows)
30

Extracción de columnas con NaN

python
nan_cols = mydf.columns[mydf.isnull().any()]
nan_cols
Index(['percent_change_volume_over_last_wk', 'previous_weeks_volume'], dtype='object')

Posiciones de los NaN

python
nan_rows.index
Int64Index([  0,  12,  24,  36,  48,  60,  72,  84,  96, 108, 120, 132, 144,
            156, 168, 180, 192, 204, 216, 228, 240, 252, 264, 276, 288, 300,
            312, 324, 336, 348],
           dtype='int64')

Eliminar filas y/o columnas con valores faltantes

Para evitar el problema de los valores faltantes, la opción más simple consiste en eliminar las columnas que tienen valores faltantes y dejar solo aquellas que están completas. Sin embargo, este enfoque puede provocar que el modelo pierda información valiosa.

Para eliminar filas o columnas con valores faltantes, es muy útil dropna() de pandas.

Eliminar filas con, al menos, un NaN

python
mydf.dropna(how="any") 

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.4284901.380223239655616.0$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.470660-43.024959242963398.0$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.6383109.355500138428495.0$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.9332501.987452151379173.0$17.33$17.370.230814970.175029
51AA2/11/2011$17.33$17.48$16.97$17.371146912790.230814-25.712195154387761.0$17.39$17.28-0.632547900.172712
...................................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.004240-21.35571386758820.0$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.52161015.22103268230855.0$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.42098017.50851978616295.0$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.2250008.81195292380844.0$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.37762018.064204100521400.0$76.88$82.016.672740470.612139

720 rows × 16 columns

Eliminar filas en las que todos los valores son NaN

python
mydf.dropna(how="all")

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.79267NaNNaN$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.428491.380223239655616.0$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.47066-43.024959242963398.0$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.638319.355500138428495.0$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.933251.987452151379173.0$17.33$17.370.230814970.175029
...................................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.00424-21.35571386758820.0$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.5216115.22103268230855.0$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.4209817.50851978616295.0$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.225008.81195292380844.0$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.3776218.064204100521400.0$76.88$82.016.672740470.612139

750 rows × 16 columns

Mantener filas con, al menos, un número concreto de valores no vacíos

python
len(mydf.columns)
16
python
# Mantenemos las filas con, al menos, 2 valores que no estén vacíos
mydf.dropna(thresh = 15)

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.4284901.380223239655616.0$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.470660-43.024959242963398.0$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.6383109.355500138428495.0$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.9332501.987452151379173.0$17.33$17.370.230814970.175029
51AA2/11/2011$17.33$17.48$16.97$17.371146912790.230814-25.712195154387761.0$17.39$17.28-0.632547900.172712
...................................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.004240-21.35571386758820.0$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.52161015.22103268230855.0$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.42098017.50851978616295.0$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.2250008.81195292380844.0$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.37762018.064204100521400.0$76.88$82.016.672740470.612139

720 rows × 16 columns

Eliminar filas que tengan NaN en ciertas columnas

python
mydf.dropna(subset = ["previous_weeks_volume"])

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.4284901.380223239655616.0$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.470660-43.024959242963398.0$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.6383109.355500138428495.0$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.9332501.987452151379173.0$17.33$17.370.230814970.175029
51AA2/11/2011$17.33$17.48$16.97$17.371146912790.230814-25.712195154387761.0$17.39$17.28-0.632547900.172712
...................................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.004240-21.35571386758820.0$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.52161015.22103268230855.0$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.42098017.50851978616295.0$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.2250008.81195292380844.0$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.37762018.064204100521400.0$76.88$82.016.672740470.612139

720 rows × 16 columns

Eliminar columnas que tengan al menos un NaN

python
mydf.dropna(axis = "columns", how="any") 

quarterstockdateopenhighlowclosevolumepercent_change_pricenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.79267$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.42849$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.47066$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.63831$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.93325$17.33$17.370.230814970.175029
.............................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.00424$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.52161$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.42098$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.22500$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.37762$76.88$82.016.672740470.612139

750 rows × 14 columns

python
mydf.dropna(axis = "columns", how="all") 

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.79267NaNNaN$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.428491.380223239655616.0$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.47066-43.024959242963398.0$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.638319.355500138428495.0$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.933251.987452151379173.0$17.33$17.370.230814970.175029
...................................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.00424-21.35571386758820.0$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.5216115.22103268230855.0$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.4209817.50851978616295.0$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.225008.81195292380844.0$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.3776218.064204100521400.0$76.88$82.016.672740470.612139

750 rows × 16 columns

Extracción de filas sin NaN

También puede ser interesante extraer las filas que no tienen NaN en una determinada columna, en lugar de eliminar las filas que tienen NaN.

python
mydf[mydf["percent_change_volume_over_last_wk"].notna()]

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.4284901.380223239655616.0$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.470660-43.024959242963398.0$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.6383109.355500138428495.0$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.9332501.987452151379173.0$17.33$17.370.230814970.175029
51AA2/11/2011$17.33$17.48$16.97$17.371146912790.230814-25.712195154387761.0$17.39$17.28-0.632547900.172712
...................................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.004240-21.35571386758820.0$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.52161015.22103268230855.0$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.42098017.50851978616295.0$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.2250008.81195292380844.0$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.37762018.064204100521400.0$76.88$82.016.672740470.612139

720 rows × 16 columns

Relleno de valores faltantes

El método de imputación rellena los valores faltantes con algún valor, como por ejemplo la media artmética de los valores de la columna. Aunque no es perfecto, este método es generalmente más efectivo que eliminar columnas completas.

Para rellenar valores faltantes, es muy útil fillna() de pandas.

Relleno con un valor constante

python
# Relleno de todos los valores faltantes del df con texto
mydf.fillna(value = "No sabe / no contesta", inplace = False)

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.79267No sabe / no contestaNo sabe / no contesta$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.428491.380222.39656e+08$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.47066-43.0252.42963e+08$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.638319.35551.38428e+08$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.933251.987451.51379e+08$17.33$17.370.230814970.175029
...................................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.00424-21.35578.67588e+07$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.5216115.2216.82309e+07$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.4209817.50857.86163e+07$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.225008.811959.23808e+07$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.3776218.06421.00521e+08$76.88$82.016.672740470.612139

750 rows × 16 columns

python
mydf

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.79267NaNNaN$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.428491.380223239655616.0$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.47066-43.024959242963398.0$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.638319.355500138428495.0$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.933251.987452151379173.0$17.33$17.370.230814970.175029
...................................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.00424-21.35571386758820.0$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.5216115.22103268230855.0$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.4209817.50851978616295.0$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.225008.81195292380844.0$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.3776218.064204100521400.0$76.88$82.016.672740470.612139

750 rows × 16 columns

python
# Relleno de todos los valores faltantes del df con un escalar
mydf.fillna(value = 20.)

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.7926720.00000020.0$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.428491.380223239655616.0$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.47066-43.024959242963398.0$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.638319.355500138428495.0$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.933251.987452151379173.0$17.33$17.370.230814970.175029
...................................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.00424-21.35571386758820.0$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.5216115.22103268230855.0$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.4209817.50851978616295.0$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.225008.81195292380844.0$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.3776218.064204100521400.0$76.88$82.016.672740470.612139

750 rows × 16 columns

python
# Relleno de los valores faltantes de una columna concreta
mydf["percent_change_volume_over_last_wk"].fillna(value = "Valor faltante")
0      Valor faltante
1             1.38022
2             -43.025
3              9.3555
4             1.98745
            ...      
745          -21.3557
746            15.221
747           17.5085
748           8.81195
749           18.0642
Name: percent_change_volume_over_last_wk, Length: 750, dtype: object
python
mydf.dtypes
quarter                                 int64
stock                                  object
date                                   object
open                                   object
high                                   object
low                                    object
close                                  object
volume                                  int64
percent_change_price                  float64
percent_change_volume_over_last_wk    float64
previous_weeks_volume                 float64
next_weeks_open                        object
next_weeks_close                       object
percent_change_next_weeks_price       float64
days_to_next_dividend                   int64
percent_return_next_dividend          float64
dtype: object
python
mydf.describe()

quartervolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
count750.0000007.500000e+02750.000000720.0000007.200000e+02750.000000750.000000750.000000
mean1.5200001.175478e+080.0502625.5936271.173876e+080.23846852.5253330.691826
std0.4999331.584381e+082.51780940.5434781.592322e+082.67953846.3350980.305482
min1.0000009.718851e+06-15.422900-61.4331759.718851e+06-15.4229000.0000000.065574
25%1.0000003.086624e+07-1.288053-19.8042843.067832e+07-1.22206724.0000000.534549
50%2.0000005.306088e+070.0000000.5125865.294556e+070.10119347.0000000.681067
75%2.0000001.327218e+081.65088821.8006221.333230e+081.84556269.0000000.854291
max2.0000001.453439e+099.882230327.4089241.453439e+099.882230336.0000001.564210
python
mydf["previous_weeks_volume"].mean()
117387644.83472222
python
# Relleno de los valores faltantes de cada columna con su media respectiva
mydf.apply(lambda x: x.fillna(x.mean()))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
~\anaconda3\envs\python-385\lib\site-packages\pandas\core\nanops.py in _ensure_numeric(x)
   1426         try:
-> 1427             x = float(x)
   1428         except ValueError:

ValueError: could not convert string to float: 'AAAAAAAAAAAAAAAAAAAAAAAAAXPAXPAXPAXPAXPAXPAXPAXPAXPAXPAXPAXPBABABABABABABABABABABABABACBACBACBACBACBACBACBACBACBACBACBACCATCATCATCATCATCATCATCATCATCATCATCATCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCVXCVXCVXCVXCVXCVXCVXCVXCVXCVXCVXCVXDDDDDDDDDDDDDDDDDDDDDDDDDISDISDISDISDISDISDISDISDISDISDISDISGEGEGEGEGEGEGEGEGEGEGEGEHDHDHDHDHDHDHDHDHDHDHDHDHPQHPQHPQHPQHPQHPQHPQHPQHPQHPQHPQHPQIBMIBMIBMIBMIBMIBMIBMIBMIBMIBMIBMIBMINTCINTCINTCINTCINTCINTCINTCINTCINTCINTCINTCINTCJNJJNJJNJJNJJNJJNJJNJJNJJNJJNJJNJJNJJPMJPMJPMJPMJPMJPMJPMJPMJPMJPMJPMJPMKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKOKOKOKOKOKOKOKOKOKOKOKOMCDMCDMCDMCDMCDMCDMCDMCDMCDMCDMCDMCDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMRKMRKMRKMRKMRKMRKMRKMRKMRKMRKMRKMRKMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTPFEPFEPFEPFEPFEPFEPFEPFEPFEPFEPFEPFEPGPGPGPGPGPGPGPGPGPGPGPGTTTTTTTTTTTTTRVTRVTRVTRVTRVTRVTRVTRVTRVTRVTRVTRVUTXUTXUTXUTXUTXUTXUTXUTXUTXUTXUTXUTXVZVZVZVZVZVZVZVZVZVZVZVZWMTWMTWMTWMTWMTWMTWMTWMTWMTWMTWMTWMTXOMXOMXOMXOMXOMXOMXOMXOMXOMXOMXOMXOMAAAAAAAAAAAAAAAAAAAAAAAAAAAXPAXPAXPAXPAXPAXPAXPAXPAXPAXPAXPAXPAXPBABABABABABABABABABABABABABACBACBACBACBACBACBACBACBACBACBACBACBACCATCATCATCATCATCATCATCATCATCATCATCATCATCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCVXCVXCVXCVXCVXCVXCVXCVXCVXCVXCVXCVXCVXDDDDDDDDDDDDDDDDDDDDDDDDDDDISDISDISDISDISDISDISDISDISDISDISDISDISGEGEGEGEGEGEGEGEGEGEGEGEGEHDHDHDHDHDHDHDHDHDHDHDHDHDHPQHPQHPQHPQHPQHPQHPQHPQHPQHPQHPQHPQHPQIBMIBMIBMIBMIBMIBMIBMIBMIBMIBMIBMIBMIBMINTCINTCINTCINTCINTCINTCINTCINTCINTCINTCINTCINTCINTCJNJJNJJNJJNJJNJJNJJNJJNJJNJJNJJNJJNJJNJJPMJPMJPMJPMJPMJPMJPMJPMJPMJPMJPMJPMJPMKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKOKOKOKOKOKOKOKOKOKOKOKOKOMCDMCDMCDMCDMCDMCDMCDMCDMCDMCDMCDMCDMCDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMRKMRKMRKMRKMRKMRKMRKMRKMRKMRKMRKMRKMRKMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTPFEPFEPFEPFEPFEPFEPFEPFEPFEPFEPFEPFEPFEPGPGPGPGPGPGPGPGPGPGPGPGPGTTTTTTTTTTTTTTRVTRVTRVTRVTRVTRVTRVTRVTRVTRVTRVTRVTRVUTXUTXUTXUTXUTXUTXUTXUTXUTXUTXUTXUTXUTXVZVZVZVZVZVZVZVZVZVZVZVZVZWMTWMTWMTWMTWMTWMTWMTWMTWMTWMTWMTWMTWMTXOMXOMXOMXOMXOMXOMXOMXOMXOMXOMXOMXOMXOM'

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
~\anaconda3\envs\python-385\lib\site-packages\pandas\core\nanops.py in _ensure_numeric(x)
   1430             try:
-> 1431                 x = complex(x)
   1432             except ValueError as err:

ValueError: complex() arg is a malformed string

The above exception was the direct cause of the following exception:

TypeError                                 Traceback (most recent call last)
<ipython-input-90-b49ed0a9ea6a> in <module>
      1 # Relleno de los valores faltantes de cada columna con su media respectiva
----> 2 mydf.apply(lambda x: x.fillna(x.mean()))

~\anaconda3\envs\python-385\lib\site-packages\pandas\core\frame.py in apply(self, func, axis, raw, result_type, args, **kwds)
   7539             kwds=kwds,
   7540         )
-> 7541         return op.get_result()
   7542 
   7543     def applymap(self, func) -> "DataFrame":

~\anaconda3\envs\python-385\lib\site-packages\pandas\core\apply.py in get_result(self)
    178             return self.apply_raw()
    179 
--> 180         return self.apply_standard()
    181 
    182     def apply_empty_result(self):

~\anaconda3\envs\python-385\lib\site-packages\pandas\core\apply.py in apply_standard(self)
    253 
    254     def apply_standard(self):
--> 255         results, res_index = self.apply_series_generator()
    256 
    257         # wrap results

~\anaconda3\envs\python-385\lib\site-packages\pandas\core\apply.py in apply_series_generator(self)
    282                 for i, v in enumerate(series_gen):
    283                     # ignore SettingWithCopy here in case the user mutates
--> 284                     results[i] = self.f(v)
    285                     if isinstance(results[i], ABCSeries):
    286                         # If we have a view on v, we need to make a copy because

<ipython-input-90-b49ed0a9ea6a> in <lambda>(x)
      1 # Relleno de los valores faltantes de cada columna con su media respectiva
----> 2 mydf.apply(lambda x: x.fillna(x.mean()))

~\anaconda3\envs\python-385\lib\site-packages\pandas\core\generic.py in stat_func(self, axis, skipna, level, numeric_only, **kwargs)
  11454         if level is not None:
  11455             return self._agg_by_level(name, axis=axis, level=level, skipna=skipna)
> 11456         return self._reduce(
  11457             func, name=name, axis=axis, skipna=skipna, numeric_only=numeric_only
  11458         )

~\anaconda3\envs\python-385\lib\site-packages\pandas\core\series.py in _reduce(self, op, name, axis, skipna, numeric_only, filter_type, **kwds)
   4234                 )
   4235             with np.errstate(all="ignore"):
-> 4236                 return op(delegate, skipna=skipna, **kwds)
   4237 
   4238     def _reindex_indexer(self, new_index, indexer, copy):

~\anaconda3\envs\python-385\lib\site-packages\pandas\core\nanops.py in _f(*args, **kwargs)
     69             try:
     70                 with np.errstate(invalid="ignore"):
---> 71                     return f(*args, **kwargs)
     72             except ValueError as e:
     73                 # we want to transform an object array

~\anaconda3\envs\python-385\lib\site-packages\pandas\core\nanops.py in f(values, axis, skipna, **kwds)
    127                     result = alt(values, axis=axis, skipna=skipna, **kwds)
    128             else:
--> 129                 result = alt(values, axis=axis, skipna=skipna, **kwds)
    130 
    131             return result

~\anaconda3\envs\python-385\lib\site-packages\pandas\core\nanops.py in nanmean(values, axis, skipna, mask)
    561         dtype_count = dtype
    562     count = _get_counts(values.shape, mask, axis, dtype=dtype_count)
--> 563     the_sum = _ensure_numeric(values.sum(axis, dtype=dtype_sum))
    564 
    565     if axis is not None and getattr(the_sum, "ndim", False):

~\anaconda3\envs\python-385\lib\site-packages\pandas\core\nanops.py in _ensure_numeric(x)
   1432             except ValueError as err:
   1433                 # e.g. "foo"
-> 1434                 raise TypeError(f"Could not convert {x} to numeric") from err
   1435     return x
   1436 

TypeError: Could not convert AAAAAAAAAAAAAAAAAAAAAAAAAXPAXPAXPAXPAXPAXPAXPAXPAXPAXPAXPAXPBABABABABABABABABABABABABACBACBACBACBACBACBACBACBACBACBACBACCATCATCATCATCATCATCATCATCATCATCATCATCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCVXCVXCVXCVXCVXCVXCVXCVXCVXCVXCVXCVXDDDDDDDDDDDDDDDDDDDDDDDDDISDISDISDISDISDISDISDISDISDISDISDISGEGEGEGEGEGEGEGEGEGEGEGEHDHDHDHDHDHDHDHDHDHDHDHDHPQHPQHPQHPQHPQHPQHPQHPQHPQHPQHPQHPQIBMIBMIBMIBMIBMIBMIBMIBMIBMIBMIBMIBMINTCINTCINTCINTCINTCINTCINTCINTCINTCINTCINTCINTCJNJJNJJNJJNJJNJJNJJNJJNJJNJJNJJNJJNJJPMJPMJPMJPMJPMJPMJPMJPMJPMJPMJPMJPMKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKOKOKOKOKOKOKOKOKOKOKOKOMCDMCDMCDMCDMCDMCDMCDMCDMCDMCDMCDMCDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMRKMRKMRKMRKMRKMRKMRKMRKMRKMRKMRKMRKMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTPFEPFEPFEPFEPFEPFEPFEPFEPFEPFEPFEPFEPGPGPGPGPGPGPGPGPGPGPGPGTTTTTTTTTTTTTRVTRVTRVTRVTRVTRVTRVTRVTRVTRVTRVTRVUTXUTXUTXUTXUTXUTXUTXUTXUTXUTXUTXUTXVZVZVZVZVZVZVZVZVZVZVZVZWMTWMTWMTWMTWMTWMTWMTWMTWMTWMTWMTWMTXOMXOMXOMXOMXOMXOMXOMXOMXOMXOMXOMXOMAAAAAAAAAAAAAAAAAAAAAAAAAAAXPAXPAXPAXPAXPAXPAXPAXPAXPAXPAXPAXPAXPBABABABABABABABABABABABABABACBACBACBACBACBACBACBACBACBACBACBACBACCATCATCATCATCATCATCATCATCATCATCATCATCATCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCSCOCVXCVXCVXCVXCVXCVXCVXCVXCVXCVXCVXCVXCVXDDDDDDDDDDDDDDDDDDDDDDDDDDDISDISDISDISDISDISDISDISDISDISDISDISDISGEGEGEGEGEGEGEGEGEGEGEGEGEHDHDHDHDHDHDHDHDHDHDHDHDHDHPQHPQHPQHPQHPQHPQHPQHPQHPQHPQHPQHPQHPQIBMIBMIBMIBMIBMIBMIBMIBMIBMIBMIBMIBMIBMINTCINTCINTCINTCINTCINTCINTCINTCINTCINTCINTCINTCINTCJNJJNJJNJJNJJNJJNJJNJJNJJNJJNJJNJJNJJNJJPMJPMJPMJPMJPMJPMJPMJPMJPMJPMJPMJPMJPMKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKRFTKOKOKOKOKOKOKOKOKOKOKOKOKOMCDMCDMCDMCDMCDMCDMCDMCDMCDMCDMCDMCDMCDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMRKMRKMRKMRKMRKMRKMRKMRKMRKMRKMRKMRKMRKMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTMSFTPFEPFEPFEPFEPFEPFEPFEPFEPFEPFEPFEPFEPFEPGPGPGPGPGPGPGPGPGPGPGPGPGTTTTTTTTTTTTTTRVTRVTRVTRVTRVTRVTRVTRVTRVTRVTRVTRVTRVUTXUTXUTXUTXUTXUTXUTXUTXUTXUTXUTXUTXUTXVZVZVZVZVZVZVZVZVZVZVZVZVZWMTWMTWMTWMTWMTWMTWMTWMTWMTWMTWMTWMTWMTXOMXOMXOMXOMXOMXOMXOMXOMXOMXOMXOMXOMXOM to numeric
python
mydf

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.79267NaNNaN$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.428491.380223239655616.0$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.47066-43.024959242963398.0$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.638319.355500138428495.0$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.933251.987452151379173.0$17.33$17.370.230814970.175029
...................................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.00424-21.35571386758820.0$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.5216115.22103268230855.0$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.4209817.50851978616295.0$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.225008.81195292380844.0$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.3776218.064204100521400.0$76.88$82.016.672740470.612139

750 rows × 16 columns

python
mydf.mean()
quarter                               1.520000e+00
volume                                1.175478e+08
percent_change_price                  5.026241e-02
percent_change_volume_over_last_wk    5.593627e+00
previous_weeks_volume                 1.173876e+08
percent_change_next_weeks_price       2.384681e-01
days_to_next_dividend                 5.252533e+01
percent_return_next_dividend          6.918256e-01
dtype: float64
python
mydf.fillna(mydf.mean())

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.792675.5936271.173876e+08$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.428491.3802232.396556e+08$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.47066-43.0249592.429634e+08$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.638319.3555001.384285e+08$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.933251.9874521.513792e+08$17.33$17.370.230814970.175029
...................................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.00424-21.3557138.675882e+07$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.5216115.2210326.823086e+07$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.4209817.5085197.861630e+07$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.225008.8119529.238084e+07$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.3776218.0642041.005214e+08$76.88$82.016.672740470.612139

750 rows × 16 columns

Relleno con el valor anterior

Con datos de series de tiempo, el uso de “pad” / “ffill” es extremadamente común para que el “último valor conocido” esté disponible en cada punto de tiempo.

python
mydf.fillna(method = "pad").head(20)

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.792670NaNNaN$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.4284901.380223239655616.0$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.470660-43.024959242963398.0$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.6383109.355500138428495.0$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.9332501.987452151379173.0$17.33$17.370.230814970.175029
51AA2/11/2011$17.33$17.48$16.97$17.371146912790.230814-25.712195154387761.0$17.39$17.28-0.632547900.172712
61AA2/18/2011$17.39$17.68$17.28$17.2880023895-0.632547-30.226696114691279.0$16.98$16.68-1.766780830.173611
71AA2/25/2011$16.98$17.15$15.96$16.68132981863-1.76678066.17769480023895.0$16.81$16.58-1.368230760.179856
81AA3/4/2011$16.81$16.94$16.13$16.58109493077-1.368230-17.663150132981863.0$16.58$16.03-3.317250690.180941
91AA3/11/2011$16.58$16.75$15.42$16.03114332562-3.3172504.419900109493077.0$15.95$16.111.003130620.187149
101AA3/18/2011$15.95$16.33$15.43$16.111303741081.00313014.030601114332562.0$16.38$17.094.334550550.186220
111AA3/25/2011$16.38$17.24$16.26$17.09955503924.334550-26.710607130374108.0$17.13$17.471.984820480.175541
121AXP1/7/2011$43.30$45.60$43.11$44.36451020422.448040-26.710607130374108.0$44.20$46.254.638010890.405771
131AXP1/14/2011$44.20$46.25$44.01$46.25259137134.638010-42.54425845102042.0$46.03$46.00-0.065175820.389189
141AXP1/21/2011$46.03$46.71$44.71$46.0038824728-0.06517549.82309925913713.0$46.05$43.86-4.755700750.391304
151AXP1/28/2011$46.05$46.27$43.42$43.8651427274-4.75570032.46010138824728.0$44.13$43.82-0.702470680.410397
161AXP2/4/2011$44.13$44.23$43.15$43.8239501680-0.702470-23.18924051427274.0$43.96$46.756.346680610.410771
171AXP2/11/2011$43.96$46.79$43.88$46.75437469986.34668010.74718339501680.0$46.42$45.53-1.917280540.385027
181AXP2/18/2011$46.42$46.93$45.53$45.5328564910-1.917280-34.70429743746998.0$44.94$43.53-3.137520470.395344
191AXP2/25/2011$44.94$45.12$43.01$43.5339654146-3.13752038.82118328564910.0$43.73$43.72-0.022868400.413508

Relleno con el valor posterior

Esta opción se puede indicar tanto con “bfill” como con “backfill”:

python
mydf.fillna(method = "bfill")

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.792671.380223239655616.0$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.428491.380223239655616.0$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.47066-43.024959242963398.0$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.638319.355500138428495.0$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.933251.987452151379173.0$17.33$17.370.230814970.175029
...................................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.00424-21.35571386758820.0$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.5216115.22103268230855.0$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.4209817.50851978616295.0$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.225008.81195292380844.0$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.3776218.064204100521400.0$76.88$82.016.672740470.612139

750 rows × 16 columns

Relleno mediante un diccionario de valores

python
mydf.head(2)

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.79267NaNNaN$16.71$15.97-4.42849260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.428491.380223239655616.0$16.19$15.79-2.47066190.187852
python
mydf.fillna(value = {"percent_change_volume_over_last_wk": 0.,
                    "previous_weeks_volume": "None"})

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.792670.000000None$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.428491.3802232.39656e+08$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.47066-43.0249592.42963e+08$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.638319.3555001.38428e+08$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.933251.9874521.51379e+08$17.33$17.370.230814970.175029
...................................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.00424-21.3557138.67588e+07$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.5216115.2210326.82309e+07$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.4209817.5085197.86163e+07$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.225008.8119529.23808e+07$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.3776218.0642041.00521e+08$76.88$82.016.672740470.612139

750 rows × 16 columns

Relleno estableciendo un límite

python
mydf.head(20)

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.792670NaNNaN$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.4284901.380223239655616.0$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.470660-43.024959242963398.0$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.6383109.355500138428495.0$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.9332501.987452151379173.0$17.33$17.370.230814970.175029
51AA2/11/2011$17.33$17.48$16.97$17.371146912790.230814-25.712195154387761.0$17.39$17.28-0.632547900.172712
61AA2/18/2011$17.39$17.68$17.28$17.2880023895-0.632547-30.226696114691279.0$16.98$16.68-1.766780830.173611
71AA2/25/2011$16.98$17.15$15.96$16.68132981863-1.76678066.17769480023895.0$16.81$16.58-1.368230760.179856
81AA3/4/2011$16.81$16.94$16.13$16.58109493077-1.368230-17.663150132981863.0$16.58$16.03-3.317250690.180941
91AA3/11/2011$16.58$16.75$15.42$16.03114332562-3.3172504.419900109493077.0$15.95$16.111.003130620.187149
101AA3/18/2011$15.95$16.33$15.43$16.111303741081.00313014.030601114332562.0$16.38$17.094.334550550.186220
111AA3/25/2011$16.38$17.24$16.26$17.09955503924.334550-26.710607130374108.0$17.13$17.471.984820480.175541
121AXP1/7/2011$43.30$45.60$43.11$44.36451020422.448040NaNNaN$44.20$46.254.638010890.405771
131AXP1/14/2011$44.20$46.25$44.01$46.25259137134.638010-42.54425845102042.0$46.03$46.00-0.065175820.389189
141AXP1/21/2011$46.03$46.71$44.71$46.0038824728-0.06517549.82309925913713.0$46.05$43.86-4.755700750.391304
151AXP1/28/2011$46.05$46.27$43.42$43.8651427274-4.75570032.46010138824728.0$44.13$43.82-0.702470680.410397
161AXP2/4/2011$44.13$44.23$43.15$43.8239501680-0.702470-23.18924051427274.0$43.96$46.756.346680610.410771
171AXP2/11/2011$43.96$46.79$43.88$46.75437469986.34668010.74718339501680.0$46.42$45.53-1.917280540.385027
181AXP2/18/2011$46.42$46.93$45.53$45.5328564910-1.917280-34.70429743746998.0$44.94$43.53-3.137520470.395344
191AXP2/25/2011$44.94$45.12$43.01$43.5339654146-3.13752038.82118328564910.0$43.73$43.72-0.022868400.413508
python
mydf.fillna(value = {"percent_change_volume_over_last_wk": 0.,
                    "previous_weeks_volume": "None"},
           limit = 1).head(20)

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.7926700.000000None$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.4284901.3802232.39656e+08$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.470660-43.0249592.42963e+08$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.6383109.3555001.38428e+08$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.9332501.9874521.51379e+08$17.33$17.370.230814970.175029
51AA2/11/2011$17.33$17.48$16.97$17.371146912790.230814-25.7121951.54388e+08$17.39$17.28-0.632547900.172712
61AA2/18/2011$17.39$17.68$17.28$17.2880023895-0.632547-30.2266961.14691e+08$16.98$16.68-1.766780830.173611
71AA2/25/2011$16.98$17.15$15.96$16.68132981863-1.76678066.1776948.00239e+07$16.81$16.58-1.368230760.179856
81AA3/4/2011$16.81$16.94$16.13$16.58109493077-1.368230-17.6631501.32982e+08$16.58$16.03-3.317250690.180941
91AA3/11/2011$16.58$16.75$15.42$16.03114332562-3.3172504.4199001.09493e+08$15.95$16.111.003130620.187149
101AA3/18/2011$15.95$16.33$15.43$16.111303741081.00313014.0306011.14333e+08$16.38$17.094.334550550.186220
111AA3/25/2011$16.38$17.24$16.26$17.09955503924.334550-26.7106071.30374e+08$17.13$17.471.984820480.175541
121AXP1/7/2011$43.30$45.60$43.11$44.36451020422.448040NaNNaN$44.20$46.254.638010890.405771
131AXP1/14/2011$44.20$46.25$44.01$46.25259137134.638010-42.5442584.5102e+07$46.03$46.00-0.065175820.389189
141AXP1/21/2011$46.03$46.71$44.71$46.0038824728-0.06517549.8230992.59137e+07$46.05$43.86-4.755700750.391304
151AXP1/28/2011$46.05$46.27$43.42$43.8651427274-4.75570032.4601013.88247e+07$44.13$43.82-0.702470680.410397
161AXP2/4/2011$44.13$44.23$43.15$43.8239501680-0.702470-23.1892405.14273e+07$43.96$46.756.346680610.410771
171AXP2/11/2011$43.96$46.79$43.88$46.75437469986.34668010.7471833.95017e+07$46.42$45.53-1.917280540.385027
181AXP2/18/2011$46.42$46.93$45.53$45.5328564910-1.917280-34.7042974.3747e+07$44.94$43.53-3.137520470.395344
191AXP2/25/2011$44.94$45.12$43.01$43.5339654146-3.13752038.8211832.85649e+07$43.73$43.72-0.022868400.413508

Relleno con un valor interpolado

Los objetos Series y DataFrame tienen interpolate() que, por defecto, realiza una interpolación lineal en los puntos de datos faltantes.

  • Si se trata de una serie temporal que está creciendo a un ritmo creciente, puede ser más apropiado method=‘quadratic’.

  • Si hay valores aproximados a una función de distribución acumulativa, entonces method=‘pchip’debería funcionar bien.

  • Para completar los valores faltantes con un trazado suave, considere method=‘akima’.

Al interpolar a través de una aproximación polinómica o spline, también se debe especificar el grado u orden de la aproximación:

python
mydf.interpolate(method= "linear").head(20)

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.792670NaNNaN$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.4284901.380223239655616.0$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.470660-43.024959242963398.0$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.6383109.355500138428495.0$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.9332501.987452151379173.0$17.33$17.370.230814970.175029
51AA2/11/2011$17.33$17.48$16.97$17.371146912790.230814-25.712195154387761.0$17.39$17.28-0.632547900.172712
61AA2/18/2011$17.39$17.68$17.28$17.2880023895-0.632547-30.226696114691279.0$16.98$16.68-1.766780830.173611
71AA2/25/2011$16.98$17.15$15.96$16.68132981863-1.76678066.17769480023895.0$16.81$16.58-1.368230760.179856
81AA3/4/2011$16.81$16.94$16.13$16.58109493077-1.368230-17.663150132981863.0$16.58$16.03-3.317250690.180941
91AA3/11/2011$16.58$16.75$15.42$16.03114332562-3.3172504.419900109493077.0$15.95$16.111.003130620.187149
101AA3/18/2011$15.95$16.33$15.43$16.111303741081.00313014.030601114332562.0$16.38$17.094.334550550.186220
111AA3/25/2011$16.38$17.24$16.26$17.09955503924.334550-26.710607130374108.0$17.13$17.471.984820480.175541
121AXP1/7/2011$43.30$45.60$43.11$44.36451020422.448040-34.62743387738075.0$44.20$46.254.638010890.405771
131AXP1/14/2011$44.20$46.25$44.01$46.25259137134.638010-42.54425845102042.0$46.03$46.00-0.065175820.389189
141AXP1/21/2011$46.03$46.71$44.71$46.0038824728-0.06517549.82309925913713.0$46.05$43.86-4.755700750.391304
151AXP1/28/2011$46.05$46.27$43.42$43.8651427274-4.75570032.46010138824728.0$44.13$43.82-0.702470680.410397
161AXP2/4/2011$44.13$44.23$43.15$43.8239501680-0.702470-23.18924051427274.0$43.96$46.756.346680610.410771
171AXP2/11/2011$43.96$46.79$43.88$46.75437469986.34668010.74718339501680.0$46.42$45.53-1.917280540.385027
181AXP2/18/2011$46.42$46.93$45.53$45.5328564910-1.917280-34.70429743746998.0$44.94$43.53-3.137520470.395344
191AXP2/25/2011$44.94$45.12$43.01$43.5339654146-3.13752038.82118328564910.0$43.73$43.72-0.022868400.413508

Imputación con información adicional

La imputación de valores faltantes suele funcionar bastante bien, pero los valores introducidos no dejan de ser valores aproximados a los que podrían ser en realidad. Si, de alguna manera, le indicamos al modelo qué valores son originales y cuáles han sido imputados, le estaremos proporcionando un extra de información que en algunos casos podrá aprovechar para hacer predicciones más precisas. Una forma habitual de aportar este extra de información consiste en crear una nueva columna que indique qué valores son “TRUE” (originales) y cuáles son “FALSE” (imputados).

python
mydf.head(5)

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.79267NANNAN$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.428491.380223028239655616$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.47066-43.02495926242963398$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.638319.355500109138428495$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.933251.987451735151379173$17.33$17.370.230814970.175029
python
mydf.dtypes
quarter                                 int64
stock                                  object
date                                   object
open                                   object
high                                   object
low                                    object
close                                  object
volume                                  int64
percent_change_price                  float64
percent_change_volume_over_last_wk     object
previous_weeks_volume                  object
next_weeks_open                        object
next_weeks_close                       object
percent_change_next_weeks_price       float64
days_to_next_dividend                   int64
percent_return_next_dividend          float64
dtype: object
python
mydf.isnull().sum()
quarter                                0
stock                                  0
date                                   0
open                                   0
high                                   0
low                                    0
close                                  0
volume                                 0
percent_change_price                   0
percent_change_volume_over_last_wk    30
previous_weeks_volume                 30
next_weeks_open                        0
next_weeks_close                       0
percent_change_next_weeks_price        0
days_to_next_dividend                  0
percent_return_next_dividend           0
dtype: int64
python
mydf.replace("NAN", np.nan, inplace = True)
python
mydf

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividend
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.79267NaNNaN$16.71$15.97-4.428490260.182704
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.428491.380223028239655616$16.19$15.79-2.470660190.187852
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.47066-43.02495926242963398$15.87$16.131.638310120.189994
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.638319.355500109138428495$16.18$17.145.93325050.185989
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.933251.987451735151379173$17.33$17.370.230814970.175029
...................................................
7452XOM5/27/2011$80.22$82.63$80.07$82.63682308553.00424-21.3557134686758820$83.28$81.18-2.521610750.568801
7462XOM6/3/2011$83.28$83.75$80.18$81.1878616295-2.5216115.221031668230855$80.93$79.78-1.420980680.578960
7472XOM6/10/2011$80.93$81.87$79.72$79.7892380844-1.4209817.5085190778616295$80.00$79.02-1.225000610.589120
7482XOM6/17/2011$80.00$80.82$78.33$79.02100521400-1.225008.811952492380844$78.65$76.78-2.377620540.594786
7492XOM6/24/2011$78.65$81.12$76.78$76.78118679791-2.3776218.06420424100521400$76.88$82.016.672740470.612139

750 rows × 16 columns

python
mydf.fillna("VALOR_FALTANTE", inplace = True)
python
mydf.head(20)

quarterstockdateopenhighlowclosevolumepercent_change_pricepercent_change_volume_over_last_wkprevious_weeks_volumenext_weeks_opennext_weeks_closepercent_change_next_weeks_pricedays_to_next_dividendpercent_return_next_dividendPista_modelo
01AA1/7/2011$15.82$16.72$15.78$16.422396556163.7926700.0000000.0$16.71$15.97-4.428490260.182704FALSO
11AA1/14/2011$16.71$16.71$15.64$15.97242963398-4.4284901.380223239655616.0$16.19$15.79-2.470660190.187852VERDADERO
21AA1/21/2011$16.19$16.38$15.60$15.79138428495-2.470660-43.024959242963398.0$15.87$16.131.638310120.189994VERDADERO
31AA1/28/2011$15.87$16.63$15.82$16.131513791731.6383109.355500138428495.0$16.18$17.145.93325050.185989VERDADERO
41AA2/4/2011$16.18$17.39$16.18$17.141543877615.9332501.987452151379173.0$17.33$17.370.230814970.175029VERDADERO
51AA2/11/2011$17.33$17.48$16.97$17.371146912790.230814-25.712195154387761.0$17.39$17.28-0.632547900.172712VERDADERO
61AA2/18/2011$17.39$17.68$17.28$17.2880023895-0.632547-30.226696114691279.0$16.98$16.68-1.766780830.173611VERDADERO
71AA2/25/2011$16.98$17.15$15.96$16.68132981863-1.76678066.17769480023895.0$16.81$16.58-1.368230760.179856VERDADERO
81AA3/4/2011$16.81$16.94$16.13$16.58109493077-1.368230-17.663150132981863.0$16.58$16.03-3.317250690.180941VERDADERO
91AA3/11/2011$16.58$16.75$15.42$16.03114332562-3.3172504.419900109493077.0$15.95$16.111.003130620.187149VERDADERO
101AA3/18/2011$15.95$16.33$15.43$16.111303741081.00313014.030601114332562.0$16.38$17.094.334550550.186220VERDADERO
111AA3/25/2011$16.38$17.24$16.26$17.09955503924.334550-26.710607130374108.0$17.13$17.471.984820480.175541VERDADERO
121AXP1/7/2011$43.30$45.60$43.11$44.36451020422.4480400.0000000.0$44.20$46.254.638010890.405771FALSO
131AXP1/14/2011$44.20$46.25$44.01$46.25259137134.638010-42.54425845102042.0$46.03$46.00-0.065175820.389189VERDADERO
141AXP1/21/2011$46.03$46.71$44.71$46.0038824728-0.06517549.82309925913713.0$46.05$43.86-4.755700750.391304VERDADERO
151AXP1/28/2011$46.05$46.27$43.42$43.8651427274-4.75570032.46010138824728.0$44.13$43.82-0.702470680.410397VERDADERO
161AXP2/4/2011$44.13$44.23$43.15$43.8239501680-0.702470-23.18924051427274.0$43.96$46.756.346680610.410771VERDADERO
171AXP2/11/2011$43.96$46.79$43.88$46.75437469986.34668010.74718339501680.0$46.42$45.53-1.917280540.385027VERDADERO
181AXP2/18/2011$46.42$46.93$45.53$45.5328564910-1.917280-34.70429743746998.0$44.94$43.53-3.137520470.395344VERDADERO
191AXP2/25/2011$44.94$45.12$43.01$43.5339654146-3.13752038.82118328564910.0$43.73$43.72-0.022868400.413508VERDADERO
python
mydf["Pista_modelo"] = "VERDADERO"
python
mydf.loc[mydf["percent_change_volume_over_last_wk"] == "VALOR_FALTANTE", "Pista_modelo"] = "FALSO"
python
mydf.replace("VALOR_FALTANTE", np.nan, inplace = True)
python
mydf.fillna(0., inplace = True)

Aunque este es un buen enfoque para tratar los valores faltantes, la columna de información adicional no siempre consigue mejorar los resultados del modelo de forma significativa.

Puede ocurrir que aparentemente tengamos valores faltantes, pero que en realidad no lo sean. Puede que se trate simplemente de strings “NaN”. En este caso, necesitamos reemplazarlos por verdaderos valores faltantes.

comments powered by Disqus