如何在python中将datetimeindex更改为只包含日期

如何在python中将datetimeindex更改为只包含日期,python,python-3.x,pandas,datetime,strptime,Python,Python 3.x,Pandas,Datetime,Strptime,我有一个名为date的列,其中包含以下值 > DatetimeIndex(['2014-02-19'], dtype='datetime64[ns]', freq=None) > DatetimeIndex(['2013-02-29'], dtype='datetime64[ns]', freq=None) > DatetimeIndex(['2018-04-15'], dtype='datetime64[ns]', freq=None) 如何修改该列以只提取日期值,并去掉D

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

> DatetimeIndex(['2014-02-19'], dtype='datetime64[ns]', freq=None)
> DatetimeIndex(['2013-02-29'], dtype='datetime64[ns]', freq=None)
> DatetimeIndex(['2018-04-15'], dtype='datetime64[ns]', 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)

有人能帮我吗?

你是说像这样的东西(没有测试过)吗


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

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.findall(r"(\d{4}-\d{2}-\d{2})")
df = df.explode('date')

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

df["date"] = df["date"].str.extract(r"(\d{4}-\d{2}-\d{2})", expand=False)
如果可能,每行多个EL值:

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

我们使用regex获取输入字符串的
方括号
之间的日期元素

如果需要对象/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
    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('\[(.*?)]', expand=True).replace("'","", regex=True)
df.date = pd.to_datetime(df.date)
df
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
输出

    date
0   2014-02-19
1   2013-02-28
2   2018-04-15
    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('\[(.*?)]', expand=True).replace("'","", regex=True)
df.date = pd.to_datetime(df.date)
df
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
你可以做:

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")
datelist = df['date'].tolist()
将数据类型为datetime64ns的pd.Series转换为字符串的步骤

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

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")
datelist = df['date'].tolist()
这应该行得通