Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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 如何修复转换为datetime时的ValueError?_Python_Pandas_Datetime - Fatal编程技术网

Python 如何修复转换为datetime时的ValueError?

Python 如何修复转换为datetime时的ValueError?,python,pandas,datetime,Python,Pandas,Datetime,timedata与我的格式不匹配的错误 以下是数据示例: import pandas as pd data = pd.DataFrame({'TransactionTime': ['Sat Feb 02 12:50:00 IST 2019']}) 这是我的代码: data['TransactionTime']=pd.to_datetime(data['TransactionTime'],格式='%a%b%d%H:%M:%S%Z%Y') 回溯 ------------------------

timedata与我的格式不匹配的错误

以下是数据示例:

import pandas as pd

data = pd.DataFrame({'TransactionTime': ['Sat Feb 02 12:50:00 IST 2019']})
这是我的代码:

data['TransactionTime']=pd.to_datetime(data['TransactionTime'],格式='%a%b%d%H:%M:%S%Z%Y')
回溯
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
e:\Anaconda3\lib\site packages\pandas\core\tools\datetimes.py in\u convert\u list like\u datetimes(参数、格式、名称、tz、单位、错误、推断日期时间格式、日期优先、年份优先、精确)
431尝试:
-->432个值,tz=转换.datetime\u到\u datetime64(arg)
433 return DatetimeIndex.\u simple\u new(值,name=name,tz=tz)
pandas\\ libs\tslibs\conversion.pyx在pandas中。\ libs.tslibs.conversion.datetime\u to_datetime64()
TypeError:无法识别的值类型:
在处理上述异常期间,发生了另一个异常:
ValueError回溯(最近一次调用上次)
在里面
---->1数据['TransactionTime']=pd.to_datetime(数据['TransactionTime'],格式='%a%b%d%H:%M:%S%Z%Y')
e:\Anaconda3\lib\site packages\pandas\core\tools\datetimes.py in to_datetime(arg、errors、dayfirst、yearfirst、utc、格式、精确、单位、推断日期时间格式、原点、缓存)
726结果=参数映射(缓存数组)
727其他:
-->728 values=convert_listlike(参数值,格式)
729结果=arg.\u构造函数(值,索引=arg.index,名称=arg.name)
730 elif isinstance(参数,(abCDATA帧,abc.MutableMapping)):
e:\Anaconda3\lib\site packages\pandas\core\tools\datetimes.py in\u convert\u list like\u datetimes(参数、格式、名称、tz、单位、错误、推断日期时间格式、日期优先、年份优先、精确)
433 return DatetimeIndex.\u simple\u new(值,name=name,tz=tz)
434除了(ValueError,TypeError):
-->435升e
436
437如果结果为无:
e:\Anaconda3\lib\site packages\pandas\core\tools\datetimes.py in\u convert\u list like\u datetimes(参数、格式、名称、tz、单位、错误、推断日期时间格式、日期优先、年份优先、精确)
398试试:
399结果,时区=数组\u strptime(
-->400参数,格式,精确=精确,错误=错误
401                     )
402如果格式为“%Z”或格式为“%Z”:
熊猫\\u libs\tslibs\strptime.pyx在熊猫中。_libs.tslibs.strptime.array_strptime()
ValueError:时间数据“Sat Feb 02 12:50:00 IST 2019”与格式“%a%b%d%H:%M:%S%Z%Y”不匹配(匹配)

错误很可能源于
%Z
无法将
IST
解析到正确时区的问题。有多个时区可以缩写为“IST”,因此无论如何它都是不明确的

要将例如“IST”解析为特定时区,您可以定义映射dict并将其提供给
dateutil
的parser.parse:

import pandas as pd
import dateutil

tzmap = {'IST': dateutil.tz.gettz('Asia/Kolkata')}

data = pd.DataFrame({'TransactionTime': ['Sat Feb 02 12:50:00 IST 2019']})

data['TransactionTime'] = data['TransactionTime'].apply(lambda t: dateutil.parser.parse(t, tzinfos=tzmap))

# data['TransactionTime']
# 0   2019-02-02 12:50:00+05:30
# Name: TransactionTime, dtype: datetime64[ns, tzfile('Asia/Calcutta')]

错误很可能源于
%Z
无法将
IST
解析到正确时区的问题。有多个时区可以缩写为“IST”,因此无论如何它都是不明确的

要将例如“IST”解析为特定时区,您可以定义映射dict并将其提供给
dateutil
的parser.parse:

import pandas as pd
import dateutil

tzmap = {'IST': dateutil.tz.gettz('Asia/Kolkata')}

data = pd.DataFrame({'TransactionTime': ['Sat Feb 02 12:50:00 IST 2019']})

data['TransactionTime'] = data['TransactionTime'].apply(lambda t: dateutil.parser.parse(t, tzinfos=tzmap))

# data['TransactionTime']
# 0   2019-02-02 12:50:00+05:30
# Name: TransactionTime, dtype: datetime64[ns, tzfile('Asia/Calcutta')]
如果您的数据有多个时区。
  • 将唯一时区映射到相应的UTC偏移量,然后本地化
  • 创建
    DateTime
    列后,可以删除其他列。
    • df.drop(列=['a','b','d','time','tz','Y','TTime',,inplace=True)
或者
  • 映射到时区名称而不是偏移量。
    • 格式
      参数中使用
      %Z
      而不是
      %Z
df_tzs=df.tz.unique().tolist()
tzs=[“亚洲/加尔各答”,“美国/东部”]
maps=dict(zip(df_tzs,tzs))
df.tz=df.tz.map(地图)
df['DateTime']=pd.to_DateTime(pd.to_DateTime(df.Y+df.b+df.d+df.time+df.tz,格式=“%Y%b%d%H:%M:%S%Z”),utc=True)。dt.tz_转换('Asia/Kolkata')
t时间a b d时间tz Y日期时间
2019年2月2日星期六12:50:00 IST 2019年2月2日星期六12:50:00亚洲/加尔各答2019-02-02 12:50:00+05:30
美国东部时间2019年2月2日星期六12:50:00美国东部时间2019年2月2日星期六12:50:00美国/东部时间2019-02-02 23:20:00+05:30
如果您的数据有多个时区。
  • 将唯一时区映射到相应的UTC偏移量,然后本地化
  • 创建
    DateTime
    列后,可以删除其他列。
    • df.drop(列=['a','b','d','time','tz','Y','TTime',,inplace=True)
或者
  • 映射到时区名称而不是偏移量。
    • 格式
      参数中使用
      %Z
      而不是
      %Z
df_tzs=df.tz.unique().tolist()
tzs=[“亚洲/加尔各答”,“美国/东部”]
maps=dict(zip(df_tzs,tzs))
df.tz=df.tz.map(地图)
df['DateTime']=pd.to_DateTime(pd.to_DateTime(df.Y+df.b+df.d+df.time+df.tz,格式=“%Y%b%d%H:%M:%S%Z”),utc=True)。dt.tz_转换('Asia/Kolkata')
t时间a b d时间tz Y日期时间
2019年2月2日星期六12:50:00 IST 2019年2月2日星期六12:50:00亚洲/加尔各答2019-02-02 12:50:00+05:30
美国东部时间2019年2月2日星期六12:50:00美国东部时间2019年2月2日星期六12:50:00美国/东部时间2019-02-02 23:20:00+05:30

它可能会帮助您了解什么是
数据['TransactionTime']
。根据,它需要是“int,float,str,datetime,list,tuple,1-d数组,Series-DataFrame/dict-like”,如果你遇到了这个错误,它很可能不是。另一种可能是,您要求将其格式化为
'%a%b%d%H:%M:%S%Z%Y'
,一个