Заполнить столбец с именем подпапки в Python?

1

Я написал этот вопрос, посвященный пандам, поскольку он является более популярным модулем, чтобы понять аналогичный пример.

Я хочу добавить столбец и заполнить его частью каждого уникального адреса файлов в каталоге:

Пример: скажем, у меня есть два файла из каждой подпапки под именами: 45554 и 32456 Поэтому их пути:

C:\Users\user\Desktop\SHAPE\45554\INS\INS.shp
C:\Users\user\Desktop\SHAPE\45554\INB\INB.shp
C:\Users\user\Desktop\SHAPE\32456\INS\INS.shp
C:\Users\user\Desktop\SHAPE\32456\INB\INB.shp

поэтому мне нужно извлечь каждую позицию -3 и заполнить новый столбец.

Подобно:

   new_col
     45554
     45554
     32456
     32456
     etc..

Код:

import pandas as pd
import os
import glob

    folder = path.Path(r"C:\Users\user\Desktop\SHAPE")
        files = []
            for fil in glob.iglob('**/Desktop/SHAPE/**/' ,recursive = True):
                try:
                    files.append(pd.read_table(fil))
                    fil['col'] = shpfile.split("\\")[-3]
                except ValueError as ex:
                    if not os.listdir(fil):
                       print(f'{fil} is empty')
            df = pd.concat(files, sort=True))
            df.to_csv(folder / 'all.csv')

Как можно достичь?

  • 0
    Почему бы не добавить в список?
Теги:
pandas

2 ответа

1
Лучший ответ

Вы можете использовать модуль os для выполнения этой манипуляции. Преимущество использования этого модуля - правильный разделитель, который будет использоваться для вашей платформы.

import os

x = r'C:\Users\user\Desktop\SHAPE\45554\INS\INS.shp'

def get_folder(fp, k=5):
    return os.path.split(fp)[0].split(os.sep)[k]

x_folder = get_folder(x)  # '45554'

Затем просто примените в своей петле через pd.DataFrame.assign:

for fil in glob.iglob('**/Desktop/SHAPE/**/' ,recursive = True):
    files.append(pd.read_table(fil).assign(col=get_folder(fil)))
  • 0
    Это аргумент функции (путь к файлу), который может быть любой входной строкой. Я переименовал в фп.
  • 0
    Почему написано: TypeError: 'str' object does not support item assignment : TypeError: 'str' object does not support item assignment
Показать ещё 6 комментариев
1

Использование str.split

Пример:

import pandas as pd

df = pd.DataFrame({"Path": ['C:\\Users\\user\\Desktop\\SHAPE\\45554\\INS\\INS.shp', 'C:\\Users\\user\\Desktop\\SHAPE\\45554\\INB\\INB.shp', 'C:\\Users\\user\\Desktop\\SHAPE\\32456\\INS\\INS.shp', 'C:\\Users\\user\\Desktop\\SHAPE\\32456\\INB\\INB.shp']})
df['col'] = df["Path"].str.split(r"\\").str[-3]
print(df)

Выход:

                                            Path    col
0  C:\Users\user\Desktop\SHAPE\45554\INS\INS.shp  45554
1  C:\Users\user\Desktop\SHAPE\45554\INB\INB.shp  45554
2  C:\Users\user\Desktop\SHAPE\32456\INS\INS.shp  32456
3  C:\Users\user\Desktop\SHAPE\32456\INB\INB.shp  32456
  • 0
    Мне нужно сделать это в цикле, и это дает: TypeError: list indices must be integers or slices, not str
  • 0
    Какая строка дает вам эту ошибку?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню