Python, Isin, TypeError: only list-like objects are allowed to be passed to isin(), you passed a [str]

Question:

I’m trying to create a column status that shows if my DataFrame values are in my directory test. For example does folder O:StackOverFlow2010 exist in the O:StackOverFlow directory.

My pl_dest DataFrame is like so:

     Folder_Name_to_create
0  O:StackOverFlow2010
1  O:StackOverFlow2011

Code:

import pandas as pd

pl_dest = pd.DataFrame(
    {'Folder_Name_to_create':
        [r'O:StackOverFlow2010', r'O:StackOverFlow2011']
    }
)
test = (r'O:StackOverFlow')

pl_dest['status']  = pl_dest['Folder_Name_to_create'].isin(test)

I receive TypeError: only list-like objects are allowed to be passed to isin(), you passed a [str].

Asked By: Jonnyboi

||

Answers:

Iterate over row & check existance

from pathlib import Path
import os
import pandas as pd

status=[]

for index, row in df.iterrows():
    path = row['Folder_Name_to_create']
    path=Path(path)
    if os.path.isdir(path):
       status.append('File_exists')
    else:
       status.append('File_not_exists')

df['status']=status

Expected outputs #

Folder_Name_to_create    status 
c://:path/example        File_exists
c://:path/example2       File_not_exists

Note: Not tested…Just posting the way of execition…Try this & Let
me know

Answered By: Bhargav

You can use pathlib to check if directories exist using pathlib.Path.is_dir(). If you wrap this in a basic function you can use it with df.apply()

Since your dataframe has the full path you want to check, you don’t need your test at all, I don’t think.

import pathlib

def my_func(test_path: str) -> bool:
    p = pathlib.Path(test_path)
    return p.is_dir()

pl_dest['status']  = pl_dest['Folder_name_to_create'].apply(my_func)

edit:

If your goal is really here to just create directories that are needed, you can do that without bothering to make the new column, and you should also use a try:...except:... rather than actually checking if they exist. You could do that like this:

for folder in pl_dest['Folder_name_to_create']:
    try:
        pathlib.Path(folder).mkdir()
    except FileExistsError:
        pass
        # or in debugging you can print(f'{folder} already exists')
Answered By: scotscotmcc
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.