首页 > 解决方案 > 在 Python 中用子文件夹的名称填充列?

问题描述

我写了这个关于熊猫的问题,因为它是一个更流行的模块,以理解一个类似的例子。

我想添加一列并用目录中每个文件的唯一地址部分填充它:

示例:假设我从每个名为的子文件夹中有两个文件: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')

怎样才能实现?

标签: pythonpandas

解决方案


您可以使用该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)))

推荐阅读