将pandas的数据框列转换为np.datetime64。

4

我想在从包含年、月、日、小时和分钟列的csv文件中读取的pandas数据帧中添加一个np.datetime64列,并将其用作索引。我已经将这些单独的列组合成了日期时间字符串列。

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')

所以数据框看起来像这样:
           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
......

现在我想添加一个列,其中日期时间格式为np.datetime64
我想写:
df['datetime'] = np.datetime64(df['datetimetext'])

但是这会产生一个错误

ValueError: Could not convert object to NumPy datetime

我需要遍历每一行的数据框吗?还是有更优雅的解决方案?
1个回答

6
您所拥有的最简单方法是:
df['datetime'] = pd.to_datetime(df['datetimetext'])

文档链接

如果你的列名设置正确,你可以直接从指定的列中进行转换。我将使用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

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

输入图像说明

df.index = pd.to_datetime(df)
df

enter image description here


现在这是一个字典而不是数据框吗?我有额外的标记列,所以更喜欢使用数据框。 - doctorer
m 是一个字典,将您的列名映射到适当的转换名称... 我会更新帖子。请稍等。 - piRSquared
非常好,谢谢。我已经在原始的pd.read_csv行中更改了列名,所以您的解决方案简化为df.index=pd.to_datetime(df[['year','month','day','h','m']])(我保留了此处列出的列,因为我的实际代码中还有其他列)。谢谢。 - doctorer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接