在不同的子目录中操作数据帧
Manipulating Dataframes in different sub directories
我有许多子目录,其中我有独特的数据集。我想单独对此 df 进行一些操作。类似于:访问每个子目录,进行操作,转到下一个目录并执行相同的操作。出于说明目的,我可以提供代码:
import pandas as pd
import numpy as np
import os
os.mkdir('folder1')
d = {'column1': ['a', 'a', 'b', 'b', 'c'], 'column2': [10, 8, 6, 4, 2], 'column3': [1, 2, 3, 4, 5]}
test_a = pd.DataFrame(data=d)
test_a.to_csv('folder1/test_a.csv')
os.mkdir('folder2')
g = {'column1': ['a', 'a', 'b', 'b', 'c'], 'column2': [10, 8, 6, 4, 2], 'column3': [1, 2, 3, 4, 5]}
test_b = pd.DataFrame(data=g)
test_b.to_csv('folder2/test_b.csv')
上面的代码创建子目录,然后将示例 df 保存在该子目录中。
假设我想实现以下目标:
按column1对每个文件夹中的每个数据集进行Grouby(计数),并将其作为单独的数据框保存在相应的子目录中。最好通过起始字母(在本例中为测试)而不是其扩展名 (csv) 来调用每个数据框。
我可以编写关于如何对数据集进行分组的通用函数,但我不知道如何访问每个子目录。 (可能使用 for 循环和 os/glob 包)。
提前致谢。
使用pathlib
:
import pandas as pd
import pathlib
# directory where data files are stored
data_dir = pathlib.Path('data')
for csvfile in data_dir.glob('**/*.csv'):
print(f"Processing '{csvfile.name}' in '{csvfile.parent}'")
df = pd.read_csv(csvfile)
# do stuff here
out = df.groupby('column1').mean() # mean or whatever you want
out.to_csv(csvfile.parent / f"{csvfile.stem}_grp.csv")
print(f"Saved as '{csvfile.stem}_grp.csv' in '{csvfile.parent}'")
print()
输出:
Processing 'test_a.csv' in 'data/folder1'
Saved as 'test_a_grp.csv' in 'data/folder1'
Processing 'test_b.csv' in 'data/folder2'
Saved as 'test_b_grp.csv' in 'data/folder2'
目录树:
data
├── folder1
│ ├── test_a.csv
│ └── test_a_grp.csv
└── folder2
├── test_b.csv
└── test_b_grp.csv
我有许多子目录,其中我有独特的数据集。我想单独对此 df 进行一些操作。类似于:访问每个子目录,进行操作,转到下一个目录并执行相同的操作。出于说明目的,我可以提供代码:
import pandas as pd
import numpy as np
import os
os.mkdir('folder1')
d = {'column1': ['a', 'a', 'b', 'b', 'c'], 'column2': [10, 8, 6, 4, 2], 'column3': [1, 2, 3, 4, 5]}
test_a = pd.DataFrame(data=d)
test_a.to_csv('folder1/test_a.csv')
os.mkdir('folder2')
g = {'column1': ['a', 'a', 'b', 'b', 'c'], 'column2': [10, 8, 6, 4, 2], 'column3': [1, 2, 3, 4, 5]}
test_b = pd.DataFrame(data=g)
test_b.to_csv('folder2/test_b.csv')
上面的代码创建子目录,然后将示例 df 保存在该子目录中。
假设我想实现以下目标:
按column1对每个文件夹中的每个数据集进行Grouby(计数),并将其作为单独的数据框保存在相应的子目录中。最好通过起始字母(在本例中为测试)而不是其扩展名 (csv) 来调用每个数据框。
我可以编写关于如何对数据集进行分组的通用函数,但我不知道如何访问每个子目录。 (可能使用 for 循环和 os/glob 包)。
提前致谢。
使用pathlib
:
import pandas as pd
import pathlib
# directory where data files are stored
data_dir = pathlib.Path('data')
for csvfile in data_dir.glob('**/*.csv'):
print(f"Processing '{csvfile.name}' in '{csvfile.parent}'")
df = pd.read_csv(csvfile)
# do stuff here
out = df.groupby('column1').mean() # mean or whatever you want
out.to_csv(csvfile.parent / f"{csvfile.stem}_grp.csv")
print(f"Saved as '{csvfile.stem}_grp.csv' in '{csvfile.parent}'")
print()
输出:
Processing 'test_a.csv' in 'data/folder1'
Saved as 'test_a_grp.csv' in 'data/folder1'
Processing 'test_b.csv' in 'data/folder2'
Saved as 'test_b_grp.csv' in 'data/folder2'
目录树:
data
├── folder1
│ ├── test_a.csv
│ └── test_a_grp.csv
└── folder2
├── test_b.csv
└── test_b_grp.csv