【问题标题】:How to get the folder name from path string and add it to a new column in pandas dataframe?如何从路径字符串中获取文件夹名称并将其添加到熊猫数据框中的新列?
【发布时间】:2019-11-03 19:08:26
【问题描述】:

我想从 tar.gz 文件中读取文件夹的名称,并创建包含名称的列。

我正在使用此代码:

file_path = r"C:\Users\filename.tar.gz"
start_with = './mainfolder/'

import tarfile
import re
with tarfile.open(file_path, "r:*") as tar:
    csv_path = tar.getnames()
    csv_path = list(n for n in tar.getnames() if (n.endswith('.csv')) & (n.startswith(start_with)))
    df = pd.DataFrame()

    csv_list = []

    for file in csv_path:
        df_temp = pd.read_csv(tar.extractfile(file))
        csv_list.append(df_temp)

    df = pd.concat(csv_list)

在主文件夹中有几个有名字的文件夹。 从文件夹“X”(例如)读取 csv 文件后,应在此 csv 文件中创建“FolderName”列,并且必须包含所有行的文件夹名称(“X”)。 对于每个 csv 文件也是如此。

路径字符串示例:./mainfolder/1001_name 或 ./mainfolder/1002_some_name

【问题讨论】:

  • 您当前的代码有什么问题?有什么错误吗?
  • 它只是读取 csv 文件并将它们连接起来。但我想将文件夹名称(文件来自)添加为一列。
  • 我在答案部分添加了一个解决方案。

标签: python pandas tar


【解决方案1】:

在以下行之后:

df_temp = pd.read_csv(tar.extractfile(file))

您可以使用os.path.dirname() 方法从file 路径字符串中获取文件夹名称。更多信息here。

您需要import os 模块。

例子:

#returns ./mainfolder/1001_name
full_folder_path = os.path.dirname(file)

#returns 1001_name
folder = os.path.basename(full_folder_path)

#returns name bit
result = folder[folder.index('_')+1:]

df_temp['FolderName'] = result

这将创建一个名为FolderName 的新列并为所有行设置值。更多信息here。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-11-25
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 2021-09-19
  • 1970-01-01
  • 2011-01-25
相关资源
最近更新 更多