2017-07-05 1 views
2

は、私は次のように100行が含まれるパンダの列を持っている:パンダ列に日付の数字を分離する

timeseries 

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

それが唯一の指標だと私は番号で日時を分けたい、など2つの列を持っています:

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

'df.timeseries.str.rsplit( ''、 1、True) '? – Zero

+0

時間と数字の間にはいくつのスペースがありますか? – Vaishali

+0

彼らはいくつかのスペースで区切られていますが、私は正確に何人かはわかりません。 –

答えて

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 

を、あなたはあなたが投稿した例では

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

私のデータは浮動小数点で、コードを実装する前にdf.apply(str)を試しましたが、うまくいきませんでした! –

+1

あなたのご意見が分かりません。私はあなたの 'timeseries'が文字列だと仮定しました。列を分割してデータフレーム 'df'を作成すると、2つの列は両方とも文字列になります。これで、 'df ['number']を使って' time'をdatetime形式に 'pd.to_datetime(df.time)'と 'number'を使ってfloatに変換することができます。 – VinceP

2

を与える

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

を行うことができ、3つのスペースがあります時間と数字の部分の間。その場合、

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

あなたは、時間と数の間に2つ以上のスペースがあることがわかっている場合は、より一般的なケースでは

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