iT邦幫忙

0

該如何刪除空白欄位欄的那一列呢?

  • 分享至 

  • xImage

各位前輩好

新手小弟再來討教Python的語法

功能描述:

  1. 讀取某資料夾內的所有.xlsx檔案
  2. 把資料結合在一起後依據欄位裡的number做升冪
  3. 輸出為已處理.xlsx檔案

以下為小弟的程式碼

import glob
import pandas as pd

# 分別設定來源檔案路徑以及輸出檔案的路徑
import_folder_path = 'D:/automatic/excel'
export_file_path = 'D:/excelprocess'

# 讀取來源資料夾內所有的.xlsx檔案
path = import_folder_path + '/' + '*.xlsx'
file_path = glob.glob(path)

# 將所有檔案資料結合
df_concat = pd.DataFrame()
for i in file_path:
    df_read_excel = pd.read_excel(i)
    df_concat = pd.concat([df_read_excel, df_concat])

# 將前頭一個空白列刪除
df_drop = df_concat.drop('NaN', axis=1)
# 按照Excel表格欄位裡number的欄位做升冪
df_sort = df_drop.sort_values(by='number', ascending=True)

# 將最後排列結果輸出成已處理.xlsx檔案
df_sort.to_excel(export_file_path+'/'+'已處理.xlsx')

目前遇到的問題是
# 將前頭一個空白列刪除
df_drop = df_concat.drop('NaN', axis=1)

這一行的空欄內容
如果在這行之前執行print(df_concat)的話
會看到前面多出一行,而第一行第一欄就是空白值
我想藉由判別該空白值然後刪掉那一列的東西

但是輸入NaN或是輸入空白都無效,都會說找不到該變數(但這不是變數啊)
還請各位前輩指教這樣的狀況下該怎麼處理,謝謝!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
thomasrain
iT邦新手 5 級 ‧ 2022-04-26 19:23:29
最佳解答

我想到的是,一開始 read 就不要產生 index or 最終存檔不要儲存 index

for i in file_path:
    df_read_excel = pd.read_excel(i, ,index_col=0)
    df_concat = pd.concat([df_read_excel, df_concat])
df_sort.to_excel(export_file_path+'/'+'已處理.xlsx', index=False)
rucifa iT邦新手 5 級 ‧ 2022-04-26 20:48:12 檢舉

感謝前輩,我也剛好找到類似的文章
Python pandas和os模块合并一个文件夹内多个excel文件

他的作法就跟您說的一樣
所以最後處理的方式就是最終存檔不儲存index

更新一下最後我的程式碼

import glob
import pandas as pd

# 分別設定來源檔案路徑以及輸出檔案的路徑
import_folder_path = 'D:/automatic/excel'
export_file_path = 'D:/excelprocess'

# 讀取來源資料夾內所有的.xlsx檔案
path = import_folder_path + '/' + '*.xlsx'
file_path = glob.glob(path)

# 將所有檔案資料結合
df_concat = pd.DataFrame()
for i in file_path:
    df_read_excel = pd.read_excel(i)
    df_concat = pd.concat([df_read_excel, df_concat])

# 按照Excel表格欄位裡number的欄位做升冪
df_sort = df_concat.sort_values(by='number', ascending=True)

# 將最後排列結果輸出成已處理.xlsx檔案
df_sort.to_excel(export_file_path+'/'+'已處理.xlsx', index=False)

謝謝你的分享 :)

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-04-26 09:35:00

改成df_drop = df_concat.drop([0])試試看
資料來源

rucifa iT邦新手 5 級 ‧ 2022-04-26 15:19:44 檢舉

前輩,感謝您的回答

不過這方法似乎行不通

查了一下這似乎是因為使用dataframe的關係
第一格一定會是空白,然後下面是索引值
所以這一列一定無法去除

看別人的解法是將結果儲存檔案後再用openpyxl讀入
再透過openpyxl的.delete_cols(1)方式把第一列的資料去除
最後再存成一個新的檔案

我可能要思考可否單純用openpyxl就直接處理就是

我要發表回答

立即登入回答