按列分组数据框并保存到不同的目录

我有以下数据集:


X Y Z S A

_ _ _ _ _

0 1 2 1 1

8 5 3 1 2

5 6 7 2 1

9 8 9 2 2

6 7 7 1 3

我想像这样将它们相应地文件夹它们的 S 和 A 列


DATA\S1\A1

DATA\S1\A2

DATA\S2\A1

我只想要我的 csv 文件中的相应 XYZ 值


我试过这段代码。文件夹的创建有效,但我无法将相应的 csv 文件保存到正确的文件夹中。我该如何解决这个问题


df 是包含 3 个不同 pandas-dataframes 的列表


def write2path(df):

    path = getcwd()

    subjects = ["subject%d"%i for i in range(1,31)]

    activities = [str(i) for i in range(1,7)]

    try:

        path = path + "\\DATA"

        mkdir(path)

        

        for l in subjects:

            temp_path = path +"\\"+ l

            mkdir(temp_path)

            for k in activities:

                temp_path_child = temp_path +"\\" + k

                mkdir(temp_path_child)

                for j in range(len(df)):

                    ch='x'

                    

                    for i, x in df[j].loc[(['Subject0'] == int(l[7])) & (['Activity0'] == int(k))]: 

                        print(x)

                        val=chr(ord(ch)+j)

                        x.to_csv(temp_path_child+"\\"+f'sensor-{val}.csv', index=False)

    return self._engine.get_loc(self._maybe_cast_indexer(key))

  File "pandas\_libs\index.pyx", line 111, in pandas._libs.index.IndexEngine.get_loc

  File "pandas\_libs\index.pyx", line 135, in pandas._libs.index.IndexEngine.get_loc

  File "pandas\_libs\index_class_helper.pxi", line 109, in pandas._libs.index.Int64Engine._check_type

KeyError: False


偶然的你
浏览 128回答 2
2回答

慕慕森

让我们使用 pathlib 并使用一些整洁的功能:from pathlib import Pathdef create_folder(path):    if not path.is_dir():        path.mkdir(parents=True)def if_file_exists(filename,trg_folder,dataframe):    if trg_folder.joinpath(file).is_file():        # if file exists then write behavior here.    else:        dataframe.to_csv(trg_folder.joinpath(filename),index=False)    然后在下面的变量和 groupby 中列出您完全合格的 start_dir - 写入您的目录:start_dir = r'your_start_dir' # like /tmp/files/data for paths, group in df.groupby(['S','A']):    paths = list(map(str,paths)) # if ints.    target_folder = Path(start_dir).joinpath('DATA','S'+paths[0],'A'+paths[1])    create_folder(target_folder)    file_name = f"S{paths[0]}-A{paths[1]}.csv"    if_file_exists(file_name,target_folder,group)df = pd.read_csv("your_start_dir\DATA\S1\A1\S1-A1.csv")print(df)   X  Y  Z  S  A0  0  1  2  1  1

Smart猫小萌

如果您想为“S”和“A”的每个组合创建一个 csv 文件(比如 data.csv),那么您可以执行 groupby,然后遍历每个组,分别保存每个组样本df = pd.DataFrame({    'X': [0,8,5,9,6],    'Y': [1,5,6,8,7],    'Z': [2,3,7,8,7],    'S': [1,1,2,2,1],    'A': [1,2,1,2,3]})for group_name, df_group in df.groupby(['S','A']):  S = f"S{group_name[0]}"  A = f"A{group_name[1]}"  p = os.path.join(S, A)  if not os.path.exists(p):    os.makedirs(p)      df_group[['X', 'Y', 'Z']].reset_index(drop=True).to_csv(os.path.join(p, f"{S}_{A}.csv"), index=False)您将获得以下目录结构中的文件:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python