es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

TypeError: se esperaba un objeto de tipo str, bytes o os.PathLike, no Series

Estaba tratando de resolver un problema en línea con Google Colab.
Aquí está la celda de código.

def add_paths(df, feature_dir, label_dir=None, bands=BANDS):
  for band in bands:
      df[f"{band}_path"] = feature_dir / df["chip_id"] / f"{band}.tif"
      assert df[f"{band}_path"].path.exists().all()
  if label_dir is not None:
      df["label_path"] = label_dir / (df["chip_id"] + ".tif")
      assert df["label_path"].path.exists().all()

  return df

train_meta = add_paths(train_meta, TRAIN_FEATURES, TRAIN_LABELS)
train_meta.head()

y aquí está el error que obtuve,

TypeError                                 Traceback (most recent call last)
<ipython-input-46-db866ed40c79> in <module>()
     16 
     17 
---> 18 train_meta = add_paths(train_meta, TRAIN_FEATURES, TRAIN_LABELS)
     19 train_meta.head()

3 frames
/usr/lib/python3.7/pathlib.py in _parse_args(cls, args)
    656                 parts += a._parts
    657             else:
--> 658                 a = os.fspath(a)
    659                 if isinstance(a, str):
    660                     # Force-cast str subclasses to str (issue #21127)

TypeError: expected str, bytes or os.PathLike object, not Series

¿Hay alguna solución fácil?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que hay un error de tipo donde la función add_paths espera un objeto str, bytes o os.PathLike, pero en su lugar se obtuvo una Series. Específicamente, parece que el error ocurrió en la línea assert df[f"{band}_path"].path.exists().all() o assert df["label_path"].path.exists().all().

    Una posible solución podría ser convertir la serie relevante en un objeto de tipo string o pathlib antes de pasarlo a la función. Por ejemplo, podrías modificar el código de la siguiente manera:

    train_meta[f"chip_id"] = train_meta["chip_id"].astype(str) # asegúrate de que chip_id sea un string
    train_meta = add_paths(train_meta, str(TRAIN_FEATURES), str(TRAIN_LABELS))
    train_meta.head()
    

    Esto garantizará que los argumentos feature_dir y label_dir que se pasen a add_paths sean strings, los cuales se podrán convertir en objetos pathlib.

Comments are closed.