単純化して次のようなコードを使用して、データフレームをシリーズに変換しようとしています。
_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'])
ts = pd.Series(df['Value'], index=df['Date'])
print(ts)
_
ただし、印刷出力は次のようになります。
_Date
2016-01-01 NaN
2016-01-02 NaN
2016-01-03 NaN
2016-01-04 NaN
2016-01-05 NaN
2016-01-06 NaN
2016-01-07 NaN
2016-01-08 NaN
2016-01-09 NaN
2016-01-10 NaN
2016-01-11 NaN
2016-01-12 NaN
2016-01-13 NaN
2016-01-14 NaN
2016-01-15 NaN
2016-01-16 NaN
2016-01-17 NaN
2016-01-18 NaN
2016-01-19 NaN
2016-01-20 NaN
Name: Value, dtype: float64
_
NaN
はどこから来たのですか? DataFrame
オブジェクトのビューはSeries
クラスの有効な入力ではありませんか?
_to_series
_オブジェクトの_pd.Index
_関数 が見つかりました。DataFrame
sにも同様のものはありますか?
values
を使用できると思います。列Value
を配列に変換します。
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
または、以下を使用できます。
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
ありがとう @ ajcr なぜNaN
が得られるかを詳しく説明します:
Series
またはDataFrame
列をpd.Series
に渡すと、指定したindex
を使用してインデックスが再作成されます。 DataFrame
列には整数index
(date index
ではない)があるため、多くの欠損値が得られます。
これらの値でシリーズを作成するだけを探している場合は、次のこともできます。
pd.Series( [i for i in range(20)], pd.date_range('2016-01-02', periods=20, freq='D'))
あなたはただ行うことができます:
s = df.set_index('Date')
これは現在、1列のデータフレームです。
シリーズとして本当に欲しい場合:
s = df.set_index('Date').Value
ところで、NaNはnumpyの非数です。
あなたの方法を使用して、あなたは使うことができます:
ts = pd.Series(df['Value'].values, name='Value', index=df['Date'])
NaNを取得する理由は、正しい形式でデータを提供していないためです。シリーズをシリーズに渡します。