Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pd.ExcelWriter,追加datetime但已获取:未知或不受支持的datetime类型_Python_Pandas_Pandas.excelwriter - Fatal编程技术网

Python pd.ExcelWriter,追加datetime但已获取:未知或不受支持的datetime类型

Python pd.ExcelWriter,追加datetime但已获取:未知或不受支持的datetime类型,python,pandas,pandas.excelwriter,Python,Pandas,Pandas.excelwriter,我正在制作一个工具来导入一个.txt文件,并使用pd.ExcelWriter将其导出为一个.xslx文件。对于导入,我使用的是pd.read\u csv,效果很好。将数据框导出为.xslx也可以正常工作,但日期时间不能被excel识别: csv_file = pd.read_csv(ex_name,sep=';',skip_blank_lines=False,index_col=False,header=None,usecols=[0,1,2,3,4,5,6,7,8,9]) writer =

我正在制作一个工具来导入一个.txt文件,并使用pd.ExcelWriter将其导出为一个.xslx文件。对于导入,我使用的是
pd.read\u csv
,效果很好。将数据框导出为.xslx也可以正常工作,但日期时间不能被excel识别:

csv_file = pd.read_csv(ex_name,sep=';',skip_blank_lines=False,index_col=False,header=None,usecols=[0,1,2,3,4,5,6,7,8,9])

writer = pd.ExcelWriter('output.xlsx',
                        engine='xlsxwriter',
                        options={'strings_to_numbers': True},
                        datetime_format='yyyy-mm-dd hh:mm')
    
csv_file.to_excel(writer,sheet_name='Sheet1',index=False,header=False)
writer.save()
因此,我在writer.save()之前添加了几行来更改格式:

workbook  = writer.book
worksheet = writer.sheets['Sheet1']
formatdict = {'num_format':'yyyy-mm-dd hh:mm'}
fmt = workbook.add_format(formatdict)

worksheet.write_datetime('C6:C{0}'.format(int(len(date_export)+5)),date_export),fmt)
其中,
csv\u文件
是导入的.txt文件,
date\u导出
是我试图覆盖的日期序列。但我得到一个类型错误:
未知或不支持的日期时间类型

我还尝试附加一个使用
pd.date\u range
创建的新日期范围:

daterange = pd.date_range(start=date_export[0], periods=len(date_export),
                              freq='D', normalize=True)
使用
dtype='datetime64[ns]
但我得到了相同的错误

因此,使用
pd.ExcelWriter
导出工作(仅使用第一个代码块),但由于python控制台中的错误,get-excel无法识别日期时间

完全错误

Traceback (most recent call last):

  File "D:\txt_to_excel.py", line 399, in <module>
    worksheet.write_datetime('C6:C{0}'.format(int(len(daterange)+5)),daterange)#,fmt)

  File "C:\ProgramData\Anaconda3\lib\site-packages\xlsxwriter\worksheet.py", line 69, in cell_wrapper
    return method(self, *args, **kwargs)

  File "C:\ProgramData\Anaconda3\lib\site-packages\xlsxwriter\worksheet.py", line 770, in write_datetime
    return self._write_datetime(row, col, date, cell_format)

  File "C:\ProgramData\Anaconda3\lib\site-packages\xlsxwriter\worksheet.py", line 784, in _write_datetime
    number = self._convert_date_time(date)

  File "C:\ProgramData\Anaconda3\lib\site-packages\xlsxwriter\worksheet.py", line 3892, in _convert_date_time
    self.remove_timezone)

  File "C:\ProgramData\Anaconda3\lib\site-packages\xlsxwriter\utility.py", line 677, in datetime_to_excel_datetime
    raise TypeError("Unknown or unsupported datetime type")

TypeError: Unknown or unsupported datetime type
所需输出

是完美的,只是日期时间不被识别。

我尝试了各种不同的panda
parse_dates
和类似的选项,但我无法让它们与输入数据的格式配合使用。也许其他人会明白这一点,并给出一个有效的例子

作为替代方案,这里有一个版本,它扩展了默认的Xlsxwriter
worksheet.write()
方法,可以动态地将类似日期的字符串转换为Excel日期

将熊猫作为pd导入
从日期时间导入日期时间
ex_name='so63718752.txt'
csv_file=pd.read_csv(ex_name,sep=';',skip_blank_lines=False,
索引列=False,标题=None,
usecols=[0,1,2,3,4,5,6,7,8,9])
writer=pd.ExcelWriter('output.xlsx',
engine='xlsxwriter',
选项={'strings\'u to\'u numbers':True},
datetime_format='yyyy-mm-dd hh:mm')
csv文件到excel(编写器,工作表名称='Sheet1',索引=False,页眉=False)
#获取Pandas使用的xlsxwriter工作簿和工作表对象。
工作簿=writer.book
工作表=书写器.工作表['Sheet1']
#在本例中,为了清晰起见,请将日期列加宽。
工作表。设置_列(2、2、12、无)
工作表。设置_列(9、9、12、无)
#创建要在Excel中使用的日期格式。
日期\格式=工作簿。添加\格式({'num\格式':'yyyy-mm-dd'})
#创建一个函数,将工作表write()方法更改为
#字符串被计算为日期或只是正常处理。
定义字符串到日期(工作表、行、列、单元格、单元格格式=无):
尝试:
#尝试将单元格字符串转换为日期。
date\u time=datetime.strtime(单元格“%Y-%m-%d%H:%m:%S”)
#如果有效,则将其作为Excel日期写入。
返回工作表。写入日期时间(行、列、日期时间、日期格式)
除:
#如果不起作用,则将控制权返回给调用write()方法。
一无所获
#将write()处理程序/回调添加到工作表中。
工作表。添加写入处理程序(str、字符串到日期)
#再次写入该文件。这是低效的,但我认为是不可避免的。
csv文件到excel(编写器,工作表名称='Sheet1',索引=False,页眉=False)
writer.save()
输出(请注意,Excel中的数据类型为“日期”):

有关如何工作的说明,请参见XlsxWriter文档中的


这在某种程度上是XlsxWriter的高级版本,任何工作示例都可能很复杂。一种更好、更简单的方法可能是使用csv.py读取数据,然后直接使用XlsxWriter将其转换为Excel文件。

您能给出一个输入txt文件的示例吗?另外,请提供使用pd.read\u csv()的代码。您还可以添加完整类型错误,而不仅仅是摘要。感谢您的反馈,我添加了信息。如果您在pd.read\u csv中包含参数parse\u dates=[2],推断\u datetime\u format=True,是否会显示相同的错误?谢谢您的支持,太好了!我同意这是一个变通办法,但经过一周的努力,这已经很好了;-)
1;2;3;4;5;6;7;8;9;
LOCATION;FILTER NR;X COORD;Y COORD;SURFACE LEV (m-ref);TOP FILTER (m-ref);BOTTOM FILTER (m-ref);MEAS POINT LEV (m-ref);SED SUMP LENGTH (m);START DATE;
pb 1-1;1;1;1;1;1;1;;;2006-08-17 00:00:00

LOCATION;FILTER NR;DATE;VALUE (m-ref)
pb 1-1;1;2006-08-17 00:00:00;40.384
pb 1-1;1;2006-08-18 00:00:00;40.337
pb 1-1;1;2006-08-19 00:00:00;40.296
pb 1-1;1;2006-08-20 00:00:00;40.321
pb 1-1;1;2006-08-21 00:00:00;40.358000000000004