Python 向数据帧添加固定日期
我正在读取一些数据并使用from_记录创建一个数据帧,其中数据包含一个文本时间戳HH:MM:SS:000000。我可以使用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
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
。这对我来说很有用。