本文為網友於ithelp發問之解答:
網友有n個excel檔案,每個檔案中都有time、X、Y、Z工作表。
網友想要把每個excel檔案中「相同名稱」的工作表讀出來,並整合成同一個dataframe,
然後再來做後續的處理。
https://ithelp.ithome.com.tw/questions/10209617
import pandas as pd
import os
path = os.getcwd()
# List files:
files = os.listdir(path)
print(files)
files_xlsx = [f for f in files if f[-4:] == "xlsx"]
files_xls = [f for f in files if f[-3:] == "xls"]
files_xls.extend(files_xlsx)
for i, element in enumerate(files_xls):
print(i, element)
print(len(files_xls))
print(files_xls)
['.ipynb_checkpoints', '1.xlsx', '2.xlsx', '3.xlsx', 'Untitled.ipynb'] 0 1.xlsx 1 2.xlsx 2 3.xlsx 3 ['1.xlsx', '2.xlsx', '3.xlsx']
import warnings
sh_list = ['time', 'X', 'Y', 'Z']
for s in sh_list:
df = pd.DataFrame()
print(f'工作表變數:{s}')
for f in files_xls:
data = pd.read_excel(f, sheet_name=s)
warnings.simplefilter("ignore") #不顯示讀檔驗證警告
print(f'檔案名稱:{f},工作表{s}的原始資料筆數:{len(data)}')
df = df.append(data, ignore_index=True) # 將所有檔案中相同名稱的工作表dataframe合併
print(f'dataframe_{s}的總資料筆數:{len(df)}')
exec('{} = df.copy()'.format('df_'+s)) # 將合併好的工作表dataframe存到一個新的名稱如df_time
工作表變數:time 檔案名稱:1.xlsx,工作表time的原始資料筆數:224 檔案名稱:2.xlsx,工作表time的原始資料筆數:475 檔案名稱:3.xlsx,工作表time的原始資料筆數:469 dataframe_time的總資料筆數:1168 工作表變數:X 檔案名稱:1.xlsx,工作表X的原始資料筆數:224 檔案名稱:2.xlsx,工作表X的原始資料筆數:475 檔案名稱:3.xlsx,工作表X的原始資料筆數:469 dataframe_X的總資料筆數:1168 工作表變數:Y 檔案名稱:1.xlsx,工作表Y的原始資料筆數:224 檔案名稱:2.xlsx,工作表Y的原始資料筆數:475 檔案名稱:3.xlsx,工作表Y的原始資料筆數:469 dataframe_Y的總資料筆數:1168 工作表變數:Z 檔案名稱:1.xlsx,工作表Z的原始資料筆數:224 檔案名稱:2.xlsx,工作表Z的原始資料筆數:475 檔案名稱:3.xlsx,工作表Z的原始資料筆數:469 dataframe_Z的總資料筆數:1168
print(len(df_time))
df_time.head()
1168
0 | 1 | |
---|---|---|
0 | 0.0 | NaN |
1 | 0.0 | NaN |
2 | 0.0 | NaN |
3 | 0.0 | NaN |
4 | 0.0 | NaN |
print(len(df_X))
df_X.head()
1168
0.04102 | -0.10547 | -0.1748 | -0.13477 | 0.01904 | 0.05664 | 0.02539 | -0.09033 | -0.17432 | -0.1167 | … | -0.03516.2 | -0.02832.2 | -0.11523.1 | -0.17627.4 | 0.22949 | 0.41064 | 0.27441.2 | 0.1167.3 | 0.06006.4 | 0.06641.5 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | -0.41943 | -0.10059 | 0.20605 | 0.27051 | 0.28760 | 0.17188 | -0.10596 | -0.21484 | -0.09229 | 0.29248 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
1 | 0.05176 | 0.00586 | -0.03516 | -0.05371 | -0.01807 | 0.12744 | 0.16602 | 0.08838 | -0.03564 | -0.08008 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2 | -0.70557 | -0.48193 | -0.12988 | 0.29785 | 0.16455 | -0.24951 | 0.12354 | 0.35303 | 0.16650 | 0.15918 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
3 | 0.05127 | -0.27930 | -0.35889 | -0.21143 | -0.00977 | 0.08154 | 0.14697 | 0.28418 | 0.37305 | 0.26221 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
4 | 0.03027 | -0.59082 | -0.97949 | -0.63574 | 0.06885 | 0.47705 | 0.35059 | -0.04639 | -0.15820 | 0.07666 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
5 rows × 5559 columnsIn [5]:
print(len(df_Y))
df_Y.head()
1168
-0.15186 | -0.25 | -0.26367 | -0.2749 | -0.30957 | -0.38379 | -0.38428 | -0.37598 | -0.29883 | -0.146 | … | -0.00244.7 | 0.20654.2 | -0.01807.9 | 0.23584.2 | 0.3833.1 | -0.07617.3 | -0.37988 | -0.40771.1 | 0.12256.3 | -0.01562.5 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | -0.23535 | 0.28613 | 0.49023 | 0.21631 | -0.24805 | -0.30127 | 0.09033 | 0.37061 | 0.40283 | 0.26025 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
1 | -0.24512 | -0.16797 | -0.06836 | 0.06152 | 0.03613 | 0.00537 | 0.00000 | 0.04541 | 0.05420 | 0.04346 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2 | 0.16846 | 0.25098 | 0.11035 | -0.08691 | -0.28906 | -0.31592 | -0.35693 | -0.27637 | -0.03125 | -0.00049 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
3 | 0.24561 | 0.35889 | 0.19336 | -0.07178 | -0.05029 | 0.22754 | 0.41113 | 0.26074 | -0.11621 | -0.23633 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
4 | -0.16406 | -0.15771 | -0.09717 | -0.04883 | -0.03516 | -0.15869 | -0.18115 | -0.20459 | -0.15283 | 0.18359 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
5 rows × 5601 columnsIn [6]:
print(len(df_Z))
df_Z.head()
1168
-0.021 | 0.05566 | 0.05078 | -0.01025 | -0.05762 | -0.06982 | -0.11768 | -0.06201 | -0.04785 | -0.10254 | … | 0.33887 | 0.05273.5 | -0.26855.2 | 0.16406.2 | 0.14258.2 | 0.17725.1 | 0.1416.4 | 0.19727.3 | 0.03223.9 | -0.38916.1 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0.31445 | 0.10303 | -0.21191 | -0.16260 | 0.09375 | 0.10205 | -0.12402 | -0.23584 | -0.25879 | 0.00537 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
1 | 0.10693 | -0.03516 | 0.02100 | -0.05566 | -0.04980 | 0.01221 | -0.00195 | 0.02100 | -0.02783 | -0.00635 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2 | -0.06006 | -0.10205 | -0.06689 | 0.39844 | 0.35645 | -0.05957 | 0.09863 | -0.01172 | -0.31250 | -0.13965 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
3 | -0.14209 | -0.29150 | -0.09131 | 0.34473 | 0.56250 | 0.33936 | 0.04980 | -0.00830 | 0.10889 | 0.04736 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
4 | -0.23535 | -0.20410 | -0.08936 | -0.10107 | -0.27344 | -0.30713 | -0.17334 | -0.04834 | -0.10400 | -0.18945 | … | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
5 rows × 5298 columns