同时将多个列的类型从日期时间更改为日期(熊猫)

时间:2019-08-12 18:01:37

标签: python pandas date datetime

我有if (argc == 2){ std::ofstream outputStream(argv[1]); write(outputStream); } else{ write(std::cout); } 格式的多列,我想用一行(最好是向量化的)代码将它们全部转换为yyyy-mm-dd hh:mm:ss格式。

在R中,我将按照以下方式进行操作:

yyyy-mm-dd

我想避免对每一列都单独执行此操作。到目前为止,我只能想到以下简单的解决方案:

df[, c("col1", "col2") := list(col1 = as.Date(col1), col2 = as.Date(col2))]

所以我有两个问题:如何在一行代码中对多个列进行操作,以及如何将df["col1"] = df["col1"].dt.date df["col2"] = df["col2"].dt.date 对象变成datetime

2 个答案:

答案 0 :(得分:1)

# sample data
df = pd.DataFrame({
    'a': np.random.choice(pd.date_range("2019-01-01", "2019-12-31", freq="2H").strftime('Y%-%m-%d %H:%M:%S'), size=5),
    'b': np.random.choice(pd.date_range("2019-01-01", "2019-12-31", freq="2H").strftime('Y%-%m-%d %H:%M:%S'), size=5),
    'c': np.random.choice(pd.date_range("2019-01-01", "2019-12-31", freq="2H").strftime('Y%-%m-%d %H:%M:%S'), size=5)
})

df.loc[:, 'a':'c'] = df.loc[:, 'a':'c'].apply(lambda x: pd.to_datetime(x).dt.date)
    a           b           c 
0   2019-04-19  2019-08-11  2019-11-01
1   2019-04-02  2019-07-04  2019-08-29
2   2019-03-02  2019-06-02  2019-11-25
3   2019-08-22  2019-04-27  2019-04-28
4   2019-05-10  2019-09-21  2019-12-07

答案 1 :(得分:1)

您可以使用select_dtypes仅选择datetime dtype列和stack,转换为dt.dateunstack并更新回df

df.update(df.select_dtypes('datetime').stack().dt.date.unstack())
相关问题