如何更改 datetimeindex 以仅包含 python 中的日期
how to change datetimeindex to just contain date in python
我有一个名为 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)
有人可以帮我吗?
你的意思是这样的吗(未测试)?
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('\[(.*?)]', expand=True).replace("'","", 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'], dtype='datetime64[ns]', freq=None)",
"DatetimeIndex(['2018-04-15'], dtype='datetime64[ns]', 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")
将 dtype datetime64ns 的 pd.Series 转换为字符串
如果您想将 pd.Series 转换为列表,您可以执行以下操作:
datelist = df['date'].tolist()
我有一个名为 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)
有人可以帮我吗?
你的意思是这样的吗(未测试)?
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('\[(.*?)]', expand=True).replace("'","", 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'], dtype='datetime64[ns]', freq=None)",
"DatetimeIndex(['2018-04-15'], dtype='datetime64[ns]', 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")
将 dtype datetime64ns 的 pd.Series 转换为字符串
如果您想将 pd.Series 转换为列表,您可以执行以下操作:
datelist = df['date'].tolist()