首页 > 解决方案 > 将时间戳转换为日期并仅将日期保留在 pandas 列内的列表中

问题描述

我有一个 df,它看起来像:

df

date

[2021-08-31 00:00:00]
[2021-07-02 00:00:00, 2021-07-02 00:00:00]
[2021-08-31 00:00:00, 2021-09-15 00:00:00]

当我将其导出到时,.csv我得到一个如下所示的列:

date

[Timestamp('2021-08-31 00:00:00')]
[Timestamp('2021-07-02 00:00:00'), Timestamp('2021-07-02 00:00:00')]
[Timestamp('2021-08-31 00:00:00'), Timestamp('2021-09-15 00:00:00')]

我希望文件具有与没有.csv时相同的外观,最好没有小时、分钟和秒。dfTimestamp

我尝试了什么:

检查我是否可以像这样转换它:

for nr, item in enumerate(df['date']):
    print(pd.to_datetime(item[nr],format='%Y%m%d'))
    print(type(item[nr]))
    break

format但它仍然返回秒数,如果我添加了参数,我不明白为什么。

2021-08-31 00:00:00
<class 'pandas._libs.tslibs.timestamps.Timestamp'>

我试过了:

def to_date(df):
    res = []
    for nr, item in enumerate(df['date']):
        res.append(item[nr].date())
    return res

df['test'] = to_date(df)

但我得到:

IndexError:列表索引超出范围

而且我不确定我应该如何转换它,以便在我的.csv文件中我会得到看起来像这样的日期2021-08-31

标签: pythonpandasdatetime

解决方案


尝试通过map()和列表理解:

df['date']=df['date'].map(lambda x:[str(y) for y in x])
#you can also use apply() or agg() but they are slower then map()

最后使用to_csv()方法:

df.to_csv('filename.csv')

更新:

如果您只想要日期部分,那么:

df['date']=df['date'].map(lambda x:[str(y.date()) for y in x])
#as suggested by @MrFuppes

推荐阅读