Pandas로 여러 엑셀파일의 데이터를 정렬하는 데 오류가 발생합니다.
조회수 805회
안녕하세요! 이제 막 파이썬을 배우고 있는 공대생입니다. 나름대로 구글링을 하면서 매달려보았지만 죽어도 안 되네요. 기본이 아직 없어서 그런 것 같습니다.. 도와주시면 정말 감사하겠습니다!!
그럼 질문에 대해 설명드리겠습니다!
여러개의 엑셀파일이 있고 각 파일마다 하나의 큰 행렬이 있습니다. 아래의 코딩은 각 파일의 행렬을 제가 원하는 기준들로 정렬하고 한 열만 남겨 저장하는 코드입니다.
지금 이 코드로는 문제가 없으나 파일 하나만 정렬이 됩니다.
제가 하고자 하는 것은
자동으로(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')
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
어차피 엑셀파일이 없어서 해볼수는 없구요...가공하는 로직이야 잘 되겠지요.
아래 dataframe concatenation 샘플 참고하세요.
- 1.csv
score1 49 68 89 2 77 2 67 95 62 30
- 2.csv
score2 23 87 9 26 85 93 46 77 4 52
- 3.csv
score3 15 45 59 26 47 1 87 45 75 44
import glob import pandas as pd file_paths = [path for path in glob.glob('*.csv')] data_frames = [pd.read_csv(path) for path in file_paths] pd.concat(data_frames, axis=1) score2 score1 score3 0 23 49 15 1 87 68 45 2 9 89 59 3 26 2 26 4 85 77 47 5 93 2 1 6 46 67 87 7 77 95 45 8 4 62 75 9 52 30 44
댓글 입력