亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

按列分組數據框并保存到不同的目錄

按列分組數據框并保存到不同的目錄

偶然的你 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)

http://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)

您將獲得以下目錄結構中的文件:

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

查看完整回答
反對 回復 2023-05-23
  • 2 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號