python - 使用 panda.read_csv 组合数据和时间列

我有两个不同的列,它们一起形成一个完整的数据。第一个是数据 (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.htmlparse_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')