판다들은 한 시트에 여러 테이블을 읽습니다.
판다를 사용하여 시트 엑셀 파일에서 여러 테이블을 읽을 수 있습니까? 예를 들어, 0행부터 100행까지 표 1을 읽고 102행부터 202행까지 표 2를 읽습니다...
처리해야 할 파일이 많고 올바른 행 번호를 얻기 위해 각 테이블을 검색하지 않을 경우를 대비하여 여러 테이블을 자동으로 식별하기 위해 다음 코드를 작성했습니다.또한 코드는 각 테이블 위에 비어 있지 않은 행을 찾아 테이블 메타데이터로 읽습니다.
def parse_excel_sheet(file, sheet_name=0, threshold=5):
'''parses multiple tables from an excel sheet into multiple data frame objects. Returns [dfs, df_mds], where dfs is a list of data frames and df_mds their potential associated metadata'''
xl = pd.ExcelFile(file)
entire_sheet = xl.parse(sheet_name=sheet_name)
# count the number of non-Nan cells in each row and then the change in that number between adjacent rows
n_values = np.logical_not(entire_sheet.isnull()).sum(axis=1)
n_values_deltas = n_values[1:] - n_values[:-1].values
# define the beginnings and ends of tables using delta in n_values
table_beginnings = n_values_deltas > threshold
table_beginnings = table_beginnings[table_beginnings].index
table_endings = n_values_deltas < -threshold
table_endings = table_endings[table_endings].index
if len(table_beginnings) < len(table_endings) or len(table_beginnings) > len(table_endings)+1:
raise BaseException('Could not detect equal number of beginnings and ends')
# look for metadata before the beginnings of tables
md_beginnings = []
for start in table_beginnings:
md_start = n_values.iloc[:start][n_values==0].index[-1] + 1
md_beginnings.append(md_start)
# make data frames
dfs = []
df_mds = []
for ind in range(len(table_beginnings)):
start = table_beginnings[ind]+1
if ind < len(table_endings):
stop = table_endings[ind]
else:
stop = entire_sheet.shape[0]
df = xl.parse(sheet_name=sheet_name, skiprows=start, nrows=stop-start)
dfs.append(df)
md = xl.parse(sheet_name=sheet_name, skiprows=md_beginnings[ind], nrows=start-md_beginnings[ind]-1).dropna(axis=1)
df_mds.append(md)
return dfs, df_mds
다음과 같은 Excel 파일이 있다고 가정합니다.
솔루션: 첫 번째 시트(색인:0
)
xl = pd.ExcelFile(fn)
nrows = xl.book.sheet_by_index(0).nrows
df1 = xl.parse(0, skipfooter= nrows-(10+1)).dropna(axis=1, how='all')
df2 = xl.parse(0, skiprows=12).dropna(axis=1, how='all')
편집:skip_footer
로 대체되었습니다.skipfooter
결과:
In [123]: df1
Out[123]:
a b c
0 78 68 33
1 62 26 30
2 99 35 13
3 73 97 4
4 85 7 53
5 80 20 95
6 40 52 96
7 36 23 76
8 96 73 37
9 39 35 24
In [124]: df2
Out[124]:
c1 c2 c3 c4
0 78 88 59 a
1 82 4 64 a
2 35 9 78 b
3 0 11 23 b
4 61 53 29 b
5 51 36 72 c
6 59 36 45 c
7 7 64 8 c
8 1 83 46 d
9 30 47 84 d
전체에서 처음 읽음csv
파일:
import pandas as pd
df = pd.read_csv('path_to\\your_data.csv')
그런 다음 다음 예를 들어 다음을 사용하여 개별 프레임을 얻습니다.
df1 = df.iloc[:100,:]
df2 = df.iloc[100:200,:]
언급URL : https://stackoverflow.com/questions/43367805/pandas-read-excel-multiple-tables-on-the-same-sheet
'programing' 카테고리의 다른 글
이 장고 앱 튜토리얼에서 choice_set는 무엇입니까? (0) | 2023.07.08 |
---|---|
ASP.NET 5 클래스 라이브러리 프로젝트를 만드는 이유는 무엇입니까? (0) | 2023.07.08 |
VI가 화면에서 커밋 메시지를 기다리고 있을 때 Git 커밋을 중지하려면 어떻게 해야 합니까? (0) | 2023.07.08 |
열이 null인지 확인하기 위한 쿼리 (0) | 2023.07.08 |
특정 날짜의 모든 커밋을 보려면 어떻게 해야 합니까? (0) | 2023.07.08 |