在Pandas列中将数字与日期分开

时间:2017-07-05 11:16:09

标签: python string pandas split

我在pandas中有一列包含100行,如下所示:

timeseries

2000-05-01 10:00:00+00:00   0.9 

它只是索引,我想将日期时间与数字分开,并且有两列,如:

time                                        number

2000-05-01 10:00:00+00:00                    0.9    

我试过了:

df['start'] = mydata.str.split(' ').str.get(0)
df['end'] =   mydata.str.split(' ').str.get(1)    

但答案如下:

                         timeseries     start  end
2017-05-01 10:00:00+00:00   0.9          0.9    NaN

如何将索引分隔为日期和数字列?

2 个答案:

答案 0 :(得分:2)

在您发布的示例中,时间和数字部分之间有三个空格。在那种情况下,

df[['timeseries', 'number']] = df.timeseries.str.extract('(.*)\s{3}(.*)')

如果您知道时间和数字之间有两个或更多空格,

df[['timeseries', 'number']] = df.timeseries.str.extract('(.*)\s\s+(.*)')

对于更通用的案例,

df['number'] = df.timeseries.str.split('\s+').str[-1]
df['timeseries'] = df.timeseries.str.split('\s+').str[:-1].apply(' '.join)

在所有情况下,

    timeseries                  number
0   2000-05-01 10:00:00+00:00   0.9

答案 1 :(得分:1)

如果你有一个包含字符串的系列:

ser = pd.Series(['2000-05-01 10:00:00+00:00   0.9 ', '2000-05-01 10:00:00+00:00   1.2 ']) # some example data

然后你可以做

ser_split = ser.str.split().str
df['time'] = ser_split[0] + ' ' + ser_split[1]
df['number'] = ser_split[-1]

给出了

                        time number
0  2000-05-01 10:00:00+00:00    0.9
1  2000-05-01 10:00:00+00:00    1.2