Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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 使用语法正确的pandas to_datetime()方法,无法识别的值类型:str?_Python_Pandas_Csv_Date_Datetime - Fatal编程技术网

Python 使用语法正确的pandas to_datetime()方法,无法识别的值类型:str?

Python 使用语法正确的pandas to_datetime()方法,无法识别的值类型:str?,python,pandas,csv,date,datetime,Python,Pandas,Csv,Date,Datetime,我正在努力使用pandas的to_datetime函数将csv文件中的条目转换为datetime对象,以便将它们用于可视化。我似乎误解了一些关于如何创建datetime对象或参数的简单问题 我有一个csv文件,其中包括几个日期记录,一个日期/时间记录的示例(即一行csv文件的示例) 我想使用matplotlib将此csv文件中的每个时间可视化。我正在阅读文档,我记得看到Matplotlib可以很好地处理datetime对象。。。所以我假设我需要使用pandas的to_datetime()方法来帮

我正在努力使用pandas的to_datetime函数将csv文件中的条目转换为datetime对象,以便将它们用于可视化。我似乎误解了一些关于如何创建datetime对象或参数的简单问题

我有一个csv文件,其中包括几个日期记录,一个日期/时间记录的示例(即一行csv文件的示例)

我想使用matplotlib将此csv文件中的每个时间可视化。我正在阅读文档,我记得看到Matplotlib可以很好地处理datetime对象。。。所以我假设我需要使用pandas的to_datetime()方法来帮助我转换csv文件的每个日期/时间记录

所以我有一个方法,首先读取csv文件,创建一个列表列表,其中每个列表应该代表csv文件中的一条记录。我只看了3张唱片。我不打算包含代码,因为我真的怀疑它是否与我正在处理的问题相关,但我添加了一个打印声明,它向我建议,记录正在被正确读取并保存在列表中。。。下面是三张唱片的例子

    time_records = [[ID_IDENTIFIER, '14-Mar-18', '23:58:40'], [ID_IDENTIFIER, '14-Mar-18', '23:58:21'], [ID_IDENTIFIER, '14-Mar-18', '23:57:24']]
(ID_标识符在代码中有一个实际的ID号)

我还认为,因为这些日期不一定是python制作datetime对象的传统格式,所以在调用pandas的to_datetime()方法时,我需要使用format参数。所以我用下面的字符串变量来表示格式。有可能我写错了

    time_format_from_csv_str = time.strftime("%#d-%b-%y %H:%M:%S")
最后一部分是我创建了一个for循环来组合
time\u records
中每个列表的最后两列。我只是想发布代码,但我将把日期/时间信息与小时/分钟信息组合成一个字符串:

        for each in time_records:
            time_str = str(each[1]) + " " + str(each[2])
            print(time_str)
            a_date_object = pd.to_datetime(time_str, 
                format=time_format_from_csv_str)
    print(a_date_object)
程序在到达带有
日期对象的行时崩溃。错误消息有点长,分为两部分

  Traceback (most recent call last):
      File "C:\Users\biney\AppData\Roaming\Python\Python36\site-packages\pandas\core\tools\datetimes.py", line 377, in _convert_listlike
      values, tz = conversion.datetime_to_datetime64(arg)
      File "pandas\_libs\tslibs\conversion.pyx", line 188, in pandas._libs.tslibs.conversion.datetime_to_datetime64
      TypeError: Unrecognized value type: <class 'str'>

  During handling of the above exception, another exception occurred:

  Traceback (most recent call last):
      File "basic_content_analysis.py", line 303, in <module>
         main()
      File "basic_content_analysis.py", line 292, in main
         timestamp_date_visualization()
      File "basic_content_analysis.py", line 204, in timestamp_date_visualization
         a_date_object = pd.to_datetime(time_str, dayfirst=True, format=time_format_from_csv_str)
      File "C:\Users\biney\AppData\Roaming\Python\Python36\site-packages\pandas\core\tools\datetimes.py", line 469, in to_datetime
         result = _convert_listlike(np.array([arg]), box, format)[0]
      File "C:\Users\biney\AppData\Roaming\Python\Python36\site-packages\pandas\core\tools\datetimes.py", line 380, in _convert_listlike
         raise e
      File "C:\Users\biney\AppData\Roaming\Python\Python36\site-packages\pandas\core\tools\datetimes.py", line 347, in _convert_listlike
errors=errors)
      File "pandas\_libs\tslibs\strptime.pyx", line 157, in pandas._libs.tslibs.strptime.array_strptime
        ValueError: time data '14-Mar-18 23:58:40' does not match format '18-Jun-18 17:08:54' (match)
回溯(最近一次呼叫最后一次):
文件“C:\Users\biney\AppData\Roaming\Python36\site packages\pandas\core\tools\datetimes.py”,第377行,类似于列表
值,tz=转换.datetime\u到\u datetime64(arg)
文件“pandas\\ libs\tslibs\conversion.pyx”,第188行,在pandas.\u libs.tslibs.conversion.datetime\u to\u datetime64中
TypeError:无法识别的值类型:
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“basic_content_analysis.py”,第303行,在
main()
文件“basic_content_analysis.py”,第292行,主目录
时间戳\日期\可视化()
文件“basic\u content\u analysis.py”,第204行,时间戳\u日期\u可视化
a\u date\u object=pd.to\u datetime(time\u str,dayfirst=True,format=time\u format\u from\u csv\u str)
文件“C:\Users\biney\AppData\Roaming\Python36\site packages\pandas\core\tools\datetimes.py”,第469行,在to\u datetime中
结果=_convert_listlike(np.array([arg]),框,格式)[0]
文件“C:\Users\biney\AppData\Roaming\Python36\site packages\pandas\core\tools\datetimes.py”,第380行,类似于列表
提高e
文件“C:\Users\biney\AppData\Roaming\Python36\site packages\pandas\core\tools\datetimes.py”,第347行,类似于列表
错误=错误)
文件“pandas\\\u libs\tslibs\strtime.pyx”,第157行,在pandas.\u libs.tslibs.strtime.array\u strtime中
ValueError:时间数据“2018年3月14日23:58:40”与格式“2018年6月18日17:08:54”不匹配(匹配)
此时,我不知道如何解决这个问题,因为我认为pd.to_datetime可以接受字符串作为其参数。我也不知道我的字符串如何与它给我的格式不匹配


如何修复此错误?最后,如何从csv文件中读取条目并将其转换为datetime对象(因为我非常确定这是使用matplotlib可视化时间数据的最佳方式?

一旦将format参数更改为以下内容,这一问题就得到了解决:

    a_date_object = pd.to_datetime(time_str, dayfirst=True, format="%d-%b-%y %H:%M:%S")

我想我的问题是。。。“在pandas的to_datetime()方法中,我将一个看似相同的字符串变量传递给format参数,这有什么不对?”

看起来您无意中将格式指定为
'18-Jun-18 17:08:54'
。你能从csv str中打印出时间格式并检查它是否正确吗?不管怎样,我认为你实际上只需要
format=“%d-%b-%y%H:%M:%s”
pd.to\u datetime()中
ughhhh你是对的,这就是问题所在。csv str的时间格式为
18-Jun-18 17:31:07
。(也就是程序运行时的任何时间)我将。。。改变
    a_date_object = pd.to_datetime(time_str, dayfirst=True, format="%d-%b-%y %H:%M:%S")