Python 创建与索引重复的列
希望这听起来不是一个愚蠢的问题,但有人知道如何将时间序列索引复制为一列,并删除时区信息吗 我的df索引:Python 创建与索引重复的列,python,pandas,Python,Pandas,希望这听起来不是一个愚蠢的问题,但有人知道如何将时间序列索引复制为一列,并删除时区信息吗 我的df索引: data_to_keep.index 将产生: DatetimeIndex(['2019-06-05 00:00:00+00:00', '2019-07-12 00:00:00+00:00', '2019-07-24 00:00:00+00:00', '2019-07-25 00:00:00+00:00', '2019-07-26
data_to_keep.index
将产生:
DatetimeIndex(['2019-06-05 00:00:00+00:00', '2019-07-12 00:00:00+00:00',
'2019-07-24 00:00:00+00:00', '2019-07-25 00:00:00+00:00',
'2019-07-26 00:00:00+00:00', '2019-08-02 00:00:00+00:00',
'2019-08-13 00:00:00+00:00', '2019-08-20 00:00:00+00:00',
'2019-09-20 00:00:00+00:00', '2019-10-01 00:00:00+00:00'],
dtype='datetime64[ns, UTC]', name='Date', freq=None)
尝试使用以下信息创建df列:
data_to_keep['days'] = data_to_keep.index
data_to_keep = data_to_keep[['days']].reset_index()
data_to_keep = data_to_keep.drop('Date', axis=1)
这将产生datetime64[ns,UTC]:
days
0 2019-06-05 00:00:00+00:00
1 2019-07-12 00:00:00+00:00
2 2019-07-24 00:00:00+00:00
3 2019-07-25 00:00:00+00:00
4 2019-07-26 00:00:00+00:00
5 2019-08-02 00:00:00+00:00
6 2019-08-13 00:00:00+00:00
7 2019-08-20 00:00:00+00:00
8 2019-09-20 00:00:00+00:00
9 2019-10-01 00:00:00+00:00
如何将其转换为字符串并删除所有时区信息,即00:00:00+00:00
如果我使用:
data-to-keep=data-to-keep.days.astype(str)
这会转换为字符串,但如何去掉所有00:00:00+00:00
?因此,我的数据框架如下所示:
days
0 2019-06-05
1 2019-07-12
2 2019-07-24
3 2019-07-25
4 2019-07-26
5 2019-08-02
6 2019-08-13
7 2019-08-20
8 2019-09-20
9 2019-10-01
您可以遍历该列,并使用python字符串替换函数清除时间戳或使用正则表达式 因为所有的时间戳都有相同的模式字符串,所以替换函数会很有帮助 我使用了下面的代码,去掉了该列上的所有时间戳
def stamp(col):
for i in range(len(df[col])):
if(df[col][i]!='present'):
df[col][i]=df[col][i].replace('0:00','').strip()
用时间戳模式替换“0:00”
这里df=dataframe,col=column
我的代码看起来像这样,因为数据帧包含三个以上的列,其中包含这些类型的时间戳
我的代码中有一个转折点,那就是列中包含了“present”字符串,表示员工仍在公司工作
我相信这将对您有所帮助:)您可以遍历该列,并使用python字符串替换函数清除时间戳或使用正则表达式 因为所有的时间戳都有相同的模式字符串,所以替换函数会很有帮助 我使用了下面的代码,去掉了该列上的所有时间戳
def stamp(col):
for i in range(len(df[col])):
if(df[col][i]!='present'):
df[col][i]=df[col][i].replace('0:00','').strip()
用时间戳模式替换“0:00”
这里df=dataframe,col=column
我的代码看起来像这样,因为数据帧包含三个以上的列,其中包含这些类型的时间戳
我的代码中有一个转折点,那就是列中包含了“present”字符串,表示员工仍在公司工作
我相信这会对您有所帮助:)尝试
data\u to\u keep.index=data\u to\u keep.index.strftime(“%Y-%m-%d”)
在执行以下操作之前,请执行此操作:
data_to_keep['days'] = data_to_keep.index
data_to_keep = data_to_keep.reset_index()
data_to_keep = data_to_keep.drop('Date', axis=1)
尝试
data\u to\u keep.index=data\u to\u keep.index.strftime(“%Y-%m-%d”)
在执行以下操作之前,请执行此操作:
data_to_keep['days'] = data_to_keep.index
data_to_keep = data_to_keep.reset_index()
data_to_keep = data_to_keep.drop('Date', axis=1)
要删除时区,请运行:
df.days = df.days.dt.tz_localize(None)
结果是:
days
0 2019-06-05
1 2019-07-12
2 2019-07-24
3 2019-07-25
4 2019-07-26
5 2019-08-02
6 2019-08-13
7 2019-08-20
8 2019-09-20
9 2019-10-01
要删除时区,请运行:
df.days = df.days.dt.tz_localize(None)
结果是:
days
0 2019-06-05
1 2019-07-12
2 2019-07-24
3 2019-07-25
4 2019-07-26
5 2019-08-02
6 2019-08-13
7 2019-08-20
8 2019-09-20
9 2019-10-01
一种方法是:
import pandas as pd
df = pd.DataFrame(index=pd.DatetimeIndex(['2019-06-05 00:00:00+00:00', '2019-07-12 00:00:00+00:00',
'2019-07-24 00:00:00+00:00', '2019-07-25 00:00:00+00:00',
'2019-07-26 00:00:00+00:00', '2019-08-02 00:00:00+00:00',
'2019-08-13 00:00:00+00:00', '2019-08-20 00:00:00+00:00',
'2019-09-20 00:00:00+00:00', '2019-10-01 00:00:00+00:00'],
dtype='datetime64[ns, UTC]', name='Date', freq=None), data={'some_values':range(0,10)})
df['new_col'] = df.index.astype(str).str.split().str[0]
# Out[102]:
# Date
# 2019-06-05 00:00:00+00:00 2019-06-05
# 2019-07-12 00:00:00+00:00 2019-07-12
# 2019-07-24 00:00:00+00:00 2019-07-24
# 2019-07-25 00:00:00+00:00 2019-07-25
# 2019-07-26 00:00:00+00:00 2019-07-26
# 2019-08-02 00:00:00+00:00 2019-08-02
# 2019-08-13 00:00:00+00:00 2019-08-13
# 2019-08-20 00:00:00+00:00 2019-08-20
# 2019-09-20 00:00:00+00:00 2019-09-20
# 2019-10-01 00:00:00+00:00 2019-10-01
# Name: new_col, dtype: object
一种方法是:
import pandas as pd
df = pd.DataFrame(index=pd.DatetimeIndex(['2019-06-05 00:00:00+00:00', '2019-07-12 00:00:00+00:00',
'2019-07-24 00:00:00+00:00', '2019-07-25 00:00:00+00:00',
'2019-07-26 00:00:00+00:00', '2019-08-02 00:00:00+00:00',
'2019-08-13 00:00:00+00:00', '2019-08-20 00:00:00+00:00',
'2019-09-20 00:00:00+00:00', '2019-10-01 00:00:00+00:00'],
dtype='datetime64[ns, UTC]', name='Date', freq=None), data={'some_values':range(0,10)})
df['new_col'] = df.index.astype(str).str.split().str[0]
# Out[102]:
# Date
# 2019-06-05 00:00:00+00:00 2019-06-05
# 2019-07-12 00:00:00+00:00 2019-07-12
# 2019-07-24 00:00:00+00:00 2019-07-24
# 2019-07-25 00:00:00+00:00 2019-07-25
# 2019-07-26 00:00:00+00:00 2019-07-26
# 2019-08-02 00:00:00+00:00 2019-08-02
# 2019-08-13 00:00:00+00:00 2019-08-13
# 2019-08-20 00:00:00+00:00 2019-08-20
# 2019-09-20 00:00:00+00:00 2019-09-20
# 2019-10-01 00:00:00+00:00 2019-10-01
# Name: new_col, dtype: object
代码可以工作,但仍然会留下
00:00:00+00:00
您是否在执行其他操作之前先放置了我的代码行?为了清楚起见,您必须在开头有这一行:data\u To\u keep.index=data\u To\u keep.index.strftime(“%Y-%m-%d”)
代码可以工作,但仍然保留00:00:00+00:00
您在做其他事情之前放好我的代码行了吗?为了清楚起见,您必须在开头有一行:data\u To\u keep.index=data\u To\u keep.index.strftime(“%Y-%m-%d”)