我在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
如何将索引分隔为日期和数字列?
答案 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