Issue with date_parser: TypeError: parse() takes 1 positional argument but 2 were given
Issue with date_parser: TypeError: parse() takes 1 positional argument but 2 were given
我遇到以下错误:
TypeError: parse() takes 1 positional argument but 2 were given
我正在尝试做一个基本的数据准备,我想将日期时间信息解析为 Panda DataFrame 索引 (将 'date' 和 'time' 列组合在一起在单列中)。这是代码片段:
from pandas import read_csv
from datetime import datetime
def parse(x):
return datetime.strptime(x,'%d-%b-%y %H:%M:%S' )
dataset = read_csv("dataset.csv", header=0, parse_dates = [['date', 'time']],
index_col=0, date_parser= parse)
原来的日期和时间是这样的:
date time
25-Apr-17 19:19:40
25-Apr-17 19:19:40
25-Apr-17 19:19:45
25-Apr-17 19:19:45
我发现了另一种使用方式:
dataset = read_csv("dataset.csv", header=0, parse_dates = {'datetime':[1,2]},
index_col=0, date_parser=lambda x: datetime.strptime(x,'%d-%b-%y %H:%M:%S' )
但还是一样的问题。 TypeError: <lambda>() takes 1 positional argument but 2 were given
我想知道你们是否可以帮助我解决这个问题?
您收到此错误是因为您选择了两列并且日期解析器正在等待单个值。
如果您想手动解析时间戳,则必须使用以下示例:
def parse(x, y):
return datetime.strptime(f"{x} {y}", "%d-%b-%y %H:%M:%S")
dataset = read_csv("dataset.csv", header=0, parse_dates = [["date", "time"]],
index_col=0, date_parser=parse)
dataset
Unnamed: 0
date_time
2017-04-25 19:19:40 0
2017-04-25 19:19:40 1
2017-04-25 19:19:40 2
经过几次尝试和错误,我最终设法解决了这个问题。我使用 pd.to_datetime 而不是 datetime.strptime。
from pandas import read_csv
from datetime import datetime
import pandas as pd
def parse(d, t):
dt = d+ " " +t
return pd.to_datetime(dt)
dataset = read_csv("dataset.csv", header=0, parse_dates={'datetime': ['date', 'time']},
index_col=0, date_parser= parse)
输出:
datetime
2017-04-25 19:19:40
2017-04-25 19:19:40
2017-04-25 19:19:45
2017-04-25 19:19:45
我仔细检查了 'date' 和 'time' 的数据类型,它们的数据类型是 'object'。我不确定此方法是否适用于其他数据类型,例如字符串,但它解决了我的问题。
感谢大家的参与。
我遇到以下错误:
TypeError: parse() takes 1 positional argument but 2 were given
我正在尝试做一个基本的数据准备,我想将日期时间信息解析为 Panda DataFrame 索引 (将 'date' 和 'time' 列组合在一起在单列中)。这是代码片段:
from pandas import read_csv
from datetime import datetime
def parse(x):
return datetime.strptime(x,'%d-%b-%y %H:%M:%S' )
dataset = read_csv("dataset.csv", header=0, parse_dates = [['date', 'time']],
index_col=0, date_parser= parse)
原来的日期和时间是这样的:
date time
25-Apr-17 19:19:40
25-Apr-17 19:19:40
25-Apr-17 19:19:45
25-Apr-17 19:19:45
我发现了另一种使用方式:
dataset = read_csv("dataset.csv", header=0, parse_dates = {'datetime':[1,2]},
index_col=0, date_parser=lambda x: datetime.strptime(x,'%d-%b-%y %H:%M:%S' )
但还是一样的问题。 TypeError: <lambda>() takes 1 positional argument but 2 were given
我想知道你们是否可以帮助我解决这个问题?
您收到此错误是因为您选择了两列并且日期解析器正在等待单个值。
如果您想手动解析时间戳,则必须使用以下示例:
def parse(x, y):
return datetime.strptime(f"{x} {y}", "%d-%b-%y %H:%M:%S")
dataset = read_csv("dataset.csv", header=0, parse_dates = [["date", "time"]],
index_col=0, date_parser=parse)
dataset
Unnamed: 0
date_time
2017-04-25 19:19:40 0
2017-04-25 19:19:40 1
2017-04-25 19:19:40 2
经过几次尝试和错误,我最终设法解决了这个问题。我使用 pd.to_datetime 而不是 datetime.strptime。
from pandas import read_csv
from datetime import datetime
import pandas as pd
def parse(d, t):
dt = d+ " " +t
return pd.to_datetime(dt)
dataset = read_csv("dataset.csv", header=0, parse_dates={'datetime': ['date', 'time']},
index_col=0, date_parser= parse)
输出:
datetime
2017-04-25 19:19:40
2017-04-25 19:19:40
2017-04-25 19:19:45
2017-04-25 19:19:45
我仔细检查了 'date' 和 'time' 的数据类型,它们的数据类型是 'object'。我不确定此方法是否适用于其他数据类型,例如字符串,但它解决了我的问题。
感谢大家的参与。