편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2020.01.07

    Pandas로 여러 엑셀파일의 데이터를 정렬하는 데 오류가 발생합니다.


    안녕하세요! 이제 막 파이썬을 배우고 있는 공대생입니다. 나름대로 구글링을 하면서 매달려보았지만 죽어도 안 되네요. 기본이 아직 없어서 그런 것 같습니다.. 도와주시면 정말 감사하겠습니다!!

    그럼 질문에 대해 설명드리겠습니다!

    여러개의 엑셀파일이 있고 각 파일마다 하나의 큰 행렬이 있습니다. 아래의 코딩은 각 파일의 행렬을 제가 원하는 기준들로 정렬하고 한 열만 남겨 저장하는 코드입니다.

    지금 이 코드로는 문제가 없으나 파일 하나만 정렬이 됩니다.

    제가 하고자 하는 것은

    자동으로(ex. for문) 여러 엑셀파일들을 하나하나 읽어서, 정렬하고, 원하는 한 열만 남기고, 그 열벡터들을 모두 합해서 엑셀파일 개수만큼의 열을 가진 행렬을 만들고자 합니다.

    제가 for문을 섞어 쓴 코드를 올리려 했으나 너무 중구난방이어서 실행되는 코드만 이렇게 올립니다. for문을 어떻게 써야 오류가 나지 않을까요?

    두서없는 글 읽어주셔서 감사합니다!

    import numpy as np
    import pandas as pd
    import math
    import os
    
    path = "./"
    file_list = os.listdir(path)
    file_list_py = [file for file in file_list if file.endswith(".xlsx")]
    
    data = pd.read_excel(file_list_py[0])
    
    df20 = pd.DataFrame(data)
    df20.sort_values(by=['X Location (mm)'], inplace = True)
    
    atan2 = np.arctan2(df20['Y Location (mm)'], df20['Z Location (mm)']) * 180 / np.pi
    #arctan2(x, y)는 x가 분자, y가 분모
    atan2 = pd.DataFrame(atan2, columns = ['atan2'])
    df20 = pd.concat([df20, atan2], axis = 1)
    
    df20yz = df20.loc[:,'Y Location (mm)':'Z Location (mm)']
    dist_yz = [math.sqrt((list(df20yz.loc[k,:])[0] ** 2) + (list(df20yz.loc[k,:])[1] ** 2)) for k in range(len(df20yz))]
    dist_yz = pd.DataFrame(dist_yz, columns = ['dist_yz'])
    df20 = pd.concat([df20, dist_yz], axis = 1)
    
    df20.sort_values(by=['X Location (mm)','dist_yz','atan2'], inplace = True)
    df20 = df20.loc[:,'Equivalent (von-Mises) Stress (MPa)']
    
    df20.to_excel('result.xlsx', sheet_name = 'New')
    
  • 프로필 알 수 없는 사용자님의 편집
    날짜2020.01.07

    Pandas로 여러 엑셀파일의 데이터를 정렬하는 데 오류가 발생합니다.


    안녕하세요! 이제 막 파이썬을 배우고 있는 공대생입니다. 나름대로 구글링을 하면서 매달려보았지만 죽어도 안 되네요ㅠㅠ 기본이 아직 없어서 그런 것 같습니다.. 도와주시면 정말 감사하겠습니다!!

    그럼 질문에 대해 설명드리겠습니다!

    여러개의 엑셀파일이 있고 각 파일마다 하나의 큰 행렬이 있습니다. 아래의 코딩은 각 파일의 행렬을 제가 원하는 기준들로 정렬하고 한 열만 남겨 저장하는 코드입니다.

    지금 이 코드로는 문제가 없으나 파일 하나만 정렬이 됩니다.

    제가 하고자 하는 것은

    자동으로(ex. for문) 여러 엑셀파일들을 하나하나 읽어서, 정렬하고, 원하는 한 열만 남기고, 그 열벡터들을 모두 합해서 엑셀파일 개수만큼의 열을 가진 행렬을 만들고자 합니다.

    제가 for문을 섞어 쓴 코드를 올리려 했으나 너무 중구난방이어서 실행되는 코드만 이렇게 올립니다ㅠ. for문을 어떻게 써야 오류가 나지 않을까요?

    두서없는 글 읽어주셔서 감사합니다!

    import numpy as np
    import pandas as pd
    import math
    import os
    
    path = "./"
    file_list = os.listdir(path)
    file_list_py = [file for file in file_list if file.endswith(".xlsx")]
    
    data = pd.read_excel(file_list_py[0])
    
    df20 = pd.DataFrame(data)
    df20.sort_values(by=['X Location (mm)'], inplace = True)
    
    atan2 = np.arctan2(df20['Y Location (mm)'], df20['Z Location (mm)']) * 180 / np.pi
    #arctan2(x, y)는 x가 분자, y가 분모
    atan2 = pd.DataFrame(atan2, columns = ['atan2'])
    df20 = pd.concat([df20, atan2], axis = 1)
    
    df20yz = df20.loc[:,'Y Location (mm)':'Z Location (mm)']
    dist_yz = [math.sqrt((list(df20yz.loc[k,:])[0] ** 2) + (list(df20yz.loc[k,:])[1] ** 2)) for k in range(len(df20yz))]
    dist_yz = pd.DataFrame(dist_yz, columns = ['dist_yz'])
    df20 = pd.concat([df20, dist_yz], axis = 1)
    
    df20.sort_values(by=['X Location (mm)','dist_yz','atan2'], inplace = True)
    df20 = df20.loc[:,'Equivalent (von-Mises) Stress (MPa)']
    
    df20.to_excel('result.xlsx', sheet_name = 'New')