Excel 如何在Python中将n行xlsx转换为csv,同时保留日期值

Excel 如何在Python中将n行xlsx转换为csv,同时保留日期值,excel,python-2.7,csv,pandas,xlrd,Excel,Python 2.7,Csv,Pandas,Xlrd,我正在尝试将xlsx文件转换为一个包含标题的CSV文件和另一个包含实际数据的CSV文件。 我有以下要求: 标题不是从第一行开始,而是从第行开始。 日期不应被视为浮动,而应采用某些字符串格式。 我事先不知道文件的行或列的总数。我也不想指定哪列是日期。 使用熊猫,我被困在第一位。 我想通过两次单独的阅读来实现这一点,从开始行到开始行+1,从开始行+1到结束。 然而,从一个偏移量读取n行似乎是可行的。下面是我用来只获取一个包含头的文件的代码 import pandas as pd def parse_

我正在尝试将xlsx文件转换为一个包含标题的CSV文件和另一个包含实际数据的CSV文件。 我有以下要求:

标题不是从第一行开始,而是从第行开始。 日期不应被视为浮动,而应采用某些字符串格式。 我事先不知道文件的行或列的总数。我也不想指定哪列是日期。 使用熊猫,我被困在第一位。 我想通过两次单独的阅读来实现这一点,从开始行到开始行+1,从开始行+1到结束。 然而,从一个偏移量读取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中一样。这里唯一的解决办法似乎不是很有效,也没有很好的编码。我现在所拥有的:

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解决方案检查每个单元格。

只要您的所有数据都在标题行下方,那么下面的方法就行了。假设标题行位于第n行,索引从0开始,而不是像excel那样从1开始

df = pd.read_excel('filepath', header=n)
df.head(0).to_csv('header.csv', index=False)
df.to_csv('output.csv', header=None, index=False)

您应该能够使用header参数设置列名的行号。结合这一点和跳过行,我认为应该注意第一点。使用parse_dates传递日期列的列表。要将数字转换为日期,我相信您需要在第二行代码中使用pd.To_datetime并设置单位参数来完成此操作。@TEDPROU pandas事实上完全按照我的要求处理日期:。您能告诉我如何使用header参数并提取header吗?这确实解决了我的问题。使用整数作为列名所在的行号。详见文档:@TEDPROU我对熊猫很不熟悉。然后我应该如何将标题写入csv?或者我的输出只包含标题,当我使用时?修改它以匹配我的代码。这确实有效,谢谢。