为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

偶然的你 2023-05-23 14:39:00
我有以下数据集:X Y Z S A_ _ _ _ _0 1 2 1 18 5 3 1 25 6 7 2 19 8 9 2 26 7 7 1 3我想像这样将它们相应地文件夹它们的 S 和 A 列DATA\S1\A1DATA\S1\A2DATA\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_typeKeyError: False
查看完整描述

2 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

让我们使用 pathlib 并使用一些整洁的功能:


from pathlib import Path


def 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)

//img1.sycdn.imooc.com//646c5fa70001e16d03310298.jpg

df = pd.read_csv("your_start_dir\DATA\S1\A1\S1-A1.csv")


print(df)


   X  Y  Z  S  A

0  0  1  2  1  1


查看完整回答
反对 回复 2023-05-23
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

如果您想为“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)

您将获得以下目录结构中的文件:

//img1.sycdn.imooc.com//646c5fbc00013a5502310259.jpg

查看完整回答
反对 回复 2023-05-23
  • 2 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信