我試圖將xlsx文件轉換爲一個包含頭文件和另一個包含實際數據的CSV文件的CSV文件。 我有以下要求:如何在Python中將n行xlsx轉換爲csv,同時保留日期值
- 頭並不在第一行,但在
start_line
排發車。 - 日期不應被視爲浮動,但以某種字符串格式。
- 我不知道該文件的行或列的總數事先。我也不想指定哪一列是日期。
使用pandas
我陷在數字1 我想在兩個單獨的讀,我從start_line到start_line+1
和start_line+1
到最後閱讀實現這一目標。 然而,它似乎是not possible從偏移量中讀取n行。下面是我用來獲取包含頭文件的一個文件的代碼。
import pandas as pd
def parse_excel(file,start_line,sheet,table):
sh = pd.read_excel(file,sheet,skiprows=start_line)
sh.to_csv("output.csv",sep='\t',encoding='utf-8',index=False)
接下來,我曾嘗試使用xlrd
但這個庫將所有日期像在Excel中浮動。這裏唯一的解決方法似乎是go through all individual cells,這似乎不是很有效或編碼不錯。我現在擁有的一切:
import xlrd
def parse_excel(file,start_line,sheet,table):
with xlrd.open_workbook(file) as wb:
sh = wb.sheet_by_name(sheet)
header_written = False
with open('{0}.csv'.format(table),'wb') as csv_file:
wr = csv.writer(csv_file,delimiter='\t')
for rownum in range(sh.nrows):
if not header_written and start_line == rownum:
with open('{0}_header.csv'.format(table),'wb') as header:
hwr = csv.writer(header,delimiter='\t')
hwr.writerow(sh.row_values(rownum))
header_written = True
elif header_written:
wr.writerow(sh.row_values(rownum))
請指出我的其他解決方案/庫,展現出解決方法無論是上述的一個或解釋爲什麼我應該去爲xlrd
解決方法檢查每一個單獨的單元格。
您應該可以使用'header'參數來設置列名的行號。把它與'skip_rows'結合起來,我認爲這應該處理數字1.使用'parse_dates'來傳遞一個列日期列。爲了將數值轉換爲日期,我相信您需要在第二行代碼中使用'pd.to_datetime'並設置'unit'參數。 –
@TedPetrou'pandas'實際上按照我的意願對待日期:)。你可以告訴我如何使用'header'參數並提取標題嗎?這確實能解決我的問題。 – spijs
對列名所在的行號使用整數。有關更多詳細信息,請參閱文檔:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html –