关于python 3.x:将字符串转换为datetime

Convert string to datetime

我有一个简单的问题,它似乎是一个问过很多次(见这里,这里,这里和这里)。尽管如此,我还是解决不了。

我从csv文件中读取了一个熊猫数据帧。它包含一列,名称为start-plan,字符串格式为'05-04-2017'(2017年4月5日)。据我所知,它是一个欧洲日期时间,格式为%d-%m-%Y。我要做的是:

1
df = pd.read_csv('activities.csv')

这就是数据帧头的样子:

1
2
3
4
5
6
7
8
print(df.head())

       start-plan start-actual    end-plan  end-actual  user  late
0  12-01-2017   16-01-2017  11-02-2017  10-02-2017     1     0
1  11-05-2017   15-05-2017  10-06-2017  18-06-2017     2     1
2  20-08-2017   20-08-2017  19-09-2017  05-10-2017     3     1
3  10-12-2017   10-12-2017  09-01-2018  08-01-2018     1     0
4  25-04-2017   25-04-2017  25-05-2017  26-05-2017     4     0

我试着这样转换列:

1
pd.to_datetime(pd.Series('start-plan'), format='%d-%m-%y')

我得到一个错误,说明time data 'start-plan' does not match format '%d-%M-%Y' (match)

我做错什么了?此外,我有几个列的格式与我想要转换的相同。是否有可能一次全部转换?


你在用'start-plan'制作一个pd.Series

尝试:

1
pd.to_datetime(df['start-plan'], format='%d-%m-%y')

您也可以使用选项dayfirst=True

你可以一次装进去,像这样

1
2
3
4
5
6
7
8
9
10
11
12
13
cols = ['start-plan', 'start-actual', 'end-plan', 'end-actual']
df = df[cols].apply(
    pd.to_datetime, dayfirst=True
).join(df.drop(cols, 1))

print(df)

  start-plan start-actual   end-plan end-actual  user  late
0 2017-01-12   2017-01-16 2017-02-11 2017-02-10     1     0
1 2017-05-11   2017-05-15 2017-06-10 2017-06-18     2     1
2 2017-08-20   2017-08-20 2017-09-19 2017-10-05     3     1
3 2017-12-10   2017-12-10 2018-01-09 2018-01-08     1     0
4 2017-04-25   2017-04-25 2017-05-25 2017-05-26     4     0