Python 创建与索引重复的列

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

希望这听起来不是一个愚蠢的问题,但有人知道如何将时间序列索引复制为一列,并删除时区信息吗

我的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 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”)