python 如何将多个 Dataframe 精简为一个

w7t8yxp5  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(115)

我有一个目录,每个文件夹内有许多文件夹(images folder & labels text),我想通过concatnating文件夹名称与图像名称,使它们成为唯一的名称,将它们组合成一个 Dataframe 文件。我的目录的结构如下:

$ tree
.
├── sample
│   ├---- folder_1 ----|-- -- train.jsonl
|   |                  |----- imgs 
|   |                  |          └───├── 0.png
|   |                  |              └── 1.png
|   |                  |              └── 2.png
|   |                  |              └── 3.png
..  ..                ...               ...
|   |                  |              └── n.png
│   ├---- folder_2 ----|-- -- train.jsonl
|   |                  |----- imgs 
|   |                  |          └───├── 0.png
|   |                  |              └── 1.png
|   |                  |              └── 2.png
|   |                  |              └── 3.png
..  ..                ...               ...
|   |                  |              └── n.png
│   ├---- folder_3 ----|-- -- train.jsonl
|   |                  |----- imgs 
|   |                  |          └───├── 0.png
|   |                  |              └── 1.png
|   |                  |              └── 2.png
|   |                  |              └── 3.png
..  ..                ...               ...
|   |                  |              └── n.png

在每个文件夹中,train.jsonl文件包含图像名称和相应文本,例如folder_1

{"file_name": "0.png", "text": "Hello"}
{"file_name": "1.png", "text": "there"}

在其他情况下也是folder_2

{"file_name": "0.png", "text": "Hi"}
{"file_name": "1.png", "text": "there from the second dir"}

....
我想更新file_name路径阅读那些json行与Pandas或python和连接父目录与图像名称:

import pandas as pd
import os 
df1 = pd.read_json(path_or_buf = 'sample/folder_1/train.jsonl',lines=True,)
df2 = pd.read_json(path_or_buf = sample/folder_2/train.jsonl,lines=True,)
df3 = pd.read_json(path_or_buf = sample/folder_3/train.jsonl,lines=True,)
df4 = pd.read_json(path_or_buf = sample/folder_4/train.jsonl,lines=True,)
df = df1+df2+df3+df4 + ....

因此,预期df应该如下所示:

file_name                    text
0  sample/folder_1/0.png           Hello
1  sample/folder_1/1.png           there
2  sample/folder_2/0.png            Hi
3  sample/folder_2/1.png         there from the second dir
  ..........                          ........

为了使它们唯一,我们可以循环通过一个数据框文件组合所有它们

i7uq4tfw

i7uq4tfw1#

import pandas as pd
import os

df = pd.DataFrame(columns=['file_name', 'text'])

# Traverse the directory recursively
for root, dirs, files in os.walk('sample'):
    for file in files:
        if file == 'train.jsonl':
            df_temp = pd.read_json(os.path.join(root, file), lines=True)
            df_temp['file_name'] = os.path.join(root, 'imgs', df_temp['file_name'])

            df = df.append(df_temp, ignore_index=True)

print(df)

相关问题