I think you can use values
, it converts the Value
column to an array:
ts = pd.Series(df['Value'].values, index=df['Date'])
import pandas as pd import numpy as np import io dates = ['2016-1-{}'.format(i)for i in range(1,21)] values = [i for i in range(20)] data = {'Date': dates, 'Value': values} df = pd.DataFrame(data) df['Date'] = pd.to_datetime(df['Date']) print df['Value'].values [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] ts = pd.Series(df['Value'].values, index=df['Date'])
print(ts) Date 2016-01-01 0 2016-01-02 1 2016-01-03 2 2016-01-04 3 2016-01-05 4 2016-01-06 5 2016-01-07 6 2016-01-08 7 2016-01-09 8 2016-01-10 9 2016-01-11 10 2016-01-12 11 2016-01-13 12 2016-01-14 13 2016-01-15 14 2016-01-16 15 2016-01-17 16 2016-01-18 17 2016-01-19 18 2016-01-20 19 dtype: int64
Or you can use:
ts1 = pd.Series(data=values, index=pd.to_datetime(dates)) print(ts1) 2016-01-01 0 2016-01-02 1 2016-01-03 2 2016-01-04 3 2016-01-05 4 2016-01-06 5 2016-01-07 6 2016-01-08 7 2016-01-09 8 2016-01-10 9 2016-01-11 10 2016-01-12 11 2016-01-13 12 2016-01-14 13 2016-01-15 14 2016-01-16 15 2016-01-17 16 2016-01-18 17 2016-01-19 18 2016-01-20 19 dtype: int64
Thanks to @ajcr for the best explanation of why you get NaN
:
When you give the Series
or DataFrame
column a DataFrame
value, it will reindex it using the specified index
. Since your DataFrame
column has an integer index
(not a date index
), you get a lot of missing values.
source share