将pandas dataframe列转换为np.datetime64

doc*_*rer 2 python numpy pandas datetime64

我想向np.datetime64已从包含年,月,日,小时和分钟的列的.csv文件读取的熊猫数据框中添加一列,并将其用作索引。我将单独的列组合在一起,以形成一列日期时间字符串。

import numpy as np
import pandas as pd
filename = 'test.csv'
df = pd.read_csv(filename, header=0, usecols = [2,3,4,5,6], names = ['y','m','d','h','min'],dtype = {'y':'str','m':'str','d':'str','h':'str','min':'str'})  #read csv file into df
df['datetimetext'] = (df['y']+'-'+df['m']+'-'+df['d']+' '+df['h']+':'+df['min']+':00')
Run Code Online (Sandbox Code Playgroud)

因此,数据框如下所示:

           y   m   d   h min    datetimetext  
0       1993  09  06  00  30    1993-09-06 00:30:00
1       1993  09  06  01  00    1993-09-06 01:00:00
2       1993  09  06  01  30    1993-09-06 01:30:00
3       1993  09  06  02  00    1993-09-06 02:00:00
4       1993  09  06  02  30    1993-09-06 02:30:00
......
Run Code Online (Sandbox Code Playgroud)

现在,我想添加日期时间格式为的列 np.datetime64

我想写

df['datetime'] = np.datetime64(df['datetimetext'])
Run Code Online (Sandbox Code Playgroud)

但这会产生一个错误

ValueError: Could not convert object to NumPy datetime
Run Code Online (Sandbox Code Playgroud)

我是否需要遍历数据帧的每一行,还是有一个更优雅的解决方案?

piR*_*red 5

最简单的方法就是

df['datetime'] = pd.to_datetime(df['datetimetext'])
Run Code Online (Sandbox Code Playgroud)

链接到DOCS

但是,如果您对列进行了适当的命名,则可以直接从命名的列进行转换。我使用重命名了您的列rename

m = dict(y='year', m='month', d='day', h='h', min='m')
# rename columns and get rid of datetimetext
df = df[['y', 'm', 'd', 'h', 'min']].rename(columns=m)
df
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

接下来,我将执行一次转换并将其分配给索引

df.index = pd.to_datetime(df)
df
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明