Python 向数据帧添加固定日期

Python 向数据帧添加固定日期,python,pandas,Python,Pandas,我正在读取一些数据并使用from_记录创建一个数据帧,其中数据包含一个文本时间戳HH:MM:SS:000000。我可以使用pd.to_datetime(data.timestamp,格式='%H:%M:%S:%f')转换为timeseries。我从文件名中知道文件的日期。插入日期(并最终将其设置为索引)的pythonic和performant方法是什么 数据如下所示: 12:00:00:000000 100 12:00:01:123456 200 12:00:02:000000 300 190

我正在读取一些数据并使用from_记录创建一个数据帧,其中数据包含一个文本时间戳HH:MM:SS:000000。我可以使用
pd.to_datetime(data.timestamp,格式='%H:%M:%S:%f')转换为timeseries
。我从文件名中知道文件的日期。插入日期(并最终将其设置为索引)的pythonic和performant方法是什么

数据如下所示:

12:00:00:000000 100
12:00:01:123456 200
12:00:02:000000 300
1900-01-01 12:00:00.000000 100
1900-01-01 12:00:01.123456 200
1900-01-01 12:00:02.000000 300
如果没有插入日期,我会得到一个数据框,看起来像:

12:00:00:000000 100
12:00:01:123456 200
12:00:02:000000 300
1900-01-01 12:00:00.000000 100
1900-01-01 12:00:01.123456 200
1900-01-01 12:00:02.000000 300
我想要的是(给定
date=datetime.date(2017,6,28)


pd.to_datetime
origin
arg听起来像我想要的,但它需要输入数字时间戳而不是字符串。

您可以通过
strftime
from date创建字符串,并将其添加到
time
列中:

df['datetime'] = pd.to_datetime(date.strftime('%Y-%m-%d ') + df['time'],
                                format='%Y-%m-%d %H:%M:%S:%f')

print (df)
              time    A                   datetime
0  12:00:00:000000  100 2017-06-28 12:00:00.000000
1  12:00:01:123456  200 2017-06-28 12:00:01.123456
2  12:00:02:000000  300 2017-06-28 12:00:02.000000
和索引:

df.index = pd.to_datetime(date.strftime('%Y-%m-%d ') + df['time'],
                                format='%Y-%m-%d %H:%M:%S:%f')

print (df)
                                       time    A
time                                            
2017-06-28 12:00:00.000000  12:00:00:000000  100
2017-06-28 12:00:01.123456  12:00:01:123456  200
2017-06-28 12:00:02.000000  12:00:02:000000  300
另一个解决方案:

date = datetime.date(2017, 6, 28)
days = date - datetime.date(1900, 1, 1)

df['datetime'] = pd.to_datetime(df['time'],format='%H:%M:%S:%f') + 
                 pd.to_timedelta(days, unit='d')

print (df)
              time    A                   datetime
0  12:00:00:000000  100 2017-06-28 12:00:00.000000
1  12:00:01:123456  200 2017-06-28 12:00:01.123456
2  12:00:02:000000  300 2017-06-28 12:00:02.000000

根据@jezrael的“另一个”答案,我得出了以下结论:

df.index = pd.to_datetime(df.timestamp, format='%H:%M:%S:%f')
days = date - df.index[0].date()
df.index += pd.to_timedelta(days, unit='d')

这在功能上是可行的,但是有没有一种更快的方法不需要从字符串中解析日期?(我有数千万行)。还有另一种解决方案呢?@jezreal Awesome!不过,如果您可以在使用
read_csv()时指定日期偏移量,那就太好了
和类似的函数。你应该可以只做
df.index+=date
。这对我来说很有用。