2017-11-10 3 views
1

Dataframeがあり、 ebola_melt['str_split'] = ebola_melt.type_country.str.split("_") のように.str.split()を使用しているとわかっていますが、それは文字列のリストを返します。本当?なぜPython/Pandasで文字列のリストの要素を取得したいのですが、.strを使用する必要がありますか?

.strを使わずに.get()を使用するのではなく、作成した文字列リストの要素を取得するために、なぜ.str.get()を使用する必要がありますか?例:なぜこれが動作しない、

ebola_melt['type'] = ebola_melt.str_split.get(0) 

が、これは動作します:

ebola_melt['type'] = ebola_melt.str_split.str.get(0) 

私は答えを事前に感謝します。例はDatacampからのものです。

+1

'それは文字列のリストを返します。それは本当ですか?あなたはそれを試しましたか?そうでない場合、何があなたを止めていますか? –

+0

'これはなぜ機能しないのですか?' 'get'は' pd.DataFrame'オブジェクトに関連するファーストクラスの関数ではありませんが、_str_メソッドなので意味があります。 –

+0

これはすべて、pandasの開発者とgitのユーザーの要件に依存していると思います.'melt'関数のように。 – Wen

答えて

0

パンダシリーズにはいくつかの種類があります。型に応じて変化する型に対して呼び出すことができるメソッドのカテゴリがあります。

DateTimeオブジェクトのシリーズでは例

について、あなたはyearmonth、またはdayで取得することができます。 strftimeでフォーマットすることもできます。

カテゴリ型シリーズの場合。カテゴリまたは因数分解コードにアクセスできます。あなたがjoinextractcatなどをすることができます文字列の

...

はしかし、それは文字列のシリーズや日時シリーズで利用可能なカテゴリの関連メソッドの日時に関連するメソッドを使用できるようにするにはほとんど意味がありません。したがって、代わりに、Pandasでは、アクセサーを介して文字列に関連するメソッドにアクセスすることができます(.strと表示されます)。その後、すべての文字列関連のメソッドです。 datetimeとtimedeltaに関連するメソッドへのアクセッサとして.dt、カテゴリに関連するメソッドについては.catと同じです。


s = pd.Series('abc efg hij klm'.split()) 

s.str.get(1) 

0 b 
1 f 
2 i 
3 l 
dtype: object 

d = pd.Series(pd.date_range('2016-03-31', periods=4)) 

d.dt.daysinmonth 

0 31 
1 30 
2 30 
3 30 
dtype: int64 

c = pd.Series(pd.Categorical(list('abcd'), list('edcba'), True)) 

c.cat.codes 

0 4 
1 3 
2 2 
3 1 
dtype: int8 
関連する問題