微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将日期时间索引更改为仅包含 Python 中的日期

如何解决如何将日期时间索引更改为仅包含 Python 中的日期

我有一个名为 date 的列,其中包含此值

> DatetimeIndex(['2014-02-19'],dtype='datetime64[ns]',freq=None)
> DatetimeIndex(['2013-02-29'],freq=None)
> DatetimeIndex(['2018-04-15'],freq=None)

如何修改该列以仅提取日期值并删除 DatetimeIndex 和括号等词?

> 2014-02-19
> 2013-02-19
> 2018-04-15
 

我认为我写的代码很不正确,但仍然附在此处:

def fundate(x):
    return x[0][0]

df['date'] = df.apply(lambda row : fundate(row['date']),axis = 1)

有人可以帮我吗?

解决方法

你的意思是这样的(未测试)?

def fundate(x):
    return x.strftime("%Y-%m-%d")

来自https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.strftime.html

,

我想这就是你想要的。它从索引中选择第一项并将其更改为字符串。

df['new_column'] = df['date'].apply(lambda x: x[0].strftime("%Y-%m-%d"))
,

如果有对象 DatetimeIndex 使用:

df['date'] = df['date'].str[0]

如果每行有多个值:

df = df.explode('date')

如果有字符串且每行只有一个值:

df["date"] = df["date"].str.extract(r"(\d{4}-\d{2}-\d{2})",expand=False)

如果可能,每行的乘法值:

df["date"] = df["date"].str.findall(r"(\d{4}-\d{2}-\d{2})")
df = df.explode('date')
,

我们正在使用正则表达式来获取输入字符串 square brackets 之间的日期元素。

如果你需要在 object/str 中输出

df.date = df["date"].str.extract('\[(.*?)]',expand=True).replace("'","",regex=True)

输出

    date
0   2014-02-19
1   2013-02-28
2   2018-04-15

输出类型

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries,0 to 2
Data columns (total 1 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   date    3 non-null      object
dtypes: object(1)
memory usage: 152.0+ bytes

如果需要输出为日期时间类型

df.date = df["date"].str.extract('\[(.*?)]',regex=True)
df.date = pd.to_datetime(df.date)
df

输出

    date
0   2014-02-19
1   2013-02-28
2   2018-04-15

输出类型

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries,0 to 2
Data columns (total 1 columns):
 #   Column  Non-Null Count  Dtype         
---  ------  --------------  -----         
 0   date    3 non-null      datetime64[ns]
dtypes: datetime64[ns](1)
memory usage: 152.0 bytes

输入 DF

df = pd.DataFrame({
    'date':["DatetimeIndex(['2014-02-19'],dtype='datetime64[ns]',freq=None)","DatetimeIndex(['2013-02-28'],"DatetimeIndex(['2018-04-15'],freq=None)"]
})

df
,

你可以这样做:

import pandas as pd
import datetime as dt
rng = pd.date_range('2015-02-24',periods=5,freq='T')
df = pd.DataFrame({ 'date': rng })
    
df['date'] = df['date'].dt.strftime("%Y-%m-%d")

将数据类型为 datetime64ns 的 pd.Series 转换为字符串

如果您想将该 pd.Series 转换为列表,您可以执行以下操作:

datelist = df['date'].tolist()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。