我有两个不同的列,它们一起形成一个完整的数据。第一个是数据 (D/M/Y),第二个是时间 (H:M:S),我需要将其作为完整数据 (D/M/Y H:M:S) 读取。
我尝试的是:
mydateparser = lambda x: datetime.strptime(x, "%d/%m/%Y")
dfim = pd.read_csv('Dates_images.csv',
header = 0,
sep = ';',
usecols = ['Date','Time','Satellite'],
parse_dates = ['Date'],
date_parser = mydateparser)
dt = datetime.date('Date')
tm = datetime.time('Time')
dfim['FullDate'] = datetime.combine(dt, tm)
print(dfim)
但它不起作用,因为它不将“时间”理解为时间数据......
回答1
考虑将列表列表(或用于重命名结果的列表字典)传递到 https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html 的 parse_dates
中。注意:列表的嵌套列表不应传递多个日期时间的单个列表。根据文档:
parse_dates: bool or list of int or names or list of lists or dict,默认为False
行为如下:
- boolean。如果为真 -> 尝试解析索引。
- int 或名称列表。例如如果 [1, 2, 3] -> 尝试将第 1、2、3 列分别解析为单独的 date 列。
- 列表列表。例如如果 [[1, 3]] -> 将第 1 列和第 3 列组合并解析为单个 date 列。
- dict,例如{'foo' : [1, 3]} -> 将第 1、3 列解析为 date 并调用结果 'foo'
mydateparser = lambda x: datetime.strptime(x, "%d/%m/%Y H:M:S")
dfim = pd.read_csv(
'Dates_images.csv',
header = 0,
sep = ';',
usecols = ['Date','Time','Satellite'],
parse_dates = {"Full Time": ['Date', 'Time']},
date_parser = mydateparser
)
回答2
你可以试试
df['Full Time'] = df['Date'] + df['Time']
df['Full Time'] = pd.to_datetime(df['Full Time'], format = '%Y-%m-%d %H:%M:%S')