2017-01-19 24 views
2

私は文字列を含む列を含むデータフレームを持っています。それは次のようになります。私はこのコードを使用Python - 文字列を複数の列に分割する

[a]      [a0] [a1] [a2] [a3] [a4] [a5] 
aaa aa a aaaa   aaa  aa  a  aaaa NaN  NaN 
bbb bbb b    bbb  bbb  b  NaN  NaN  NaN 
cc cccc ccc cc ccc  cc  cccc ccc  cc  ccc  NaN 

for i in range(6): 
    df["a{}".format(i)] = df[a].apply(lambda x:x.split(' ')[i]) 

[a] 
aaa aa a aaaa 
bbb bbb b 
cc cccc ccc cc ccc 

私が希望することは、このように、[A]のspliting値で6列を追加することです私はすべての値が同じ数字の要素を持っていないので、説明することができます '範囲外の'エラーがあります。

どのようにこのエラーを回避し、エラーのすべての値をNoneに置き換えることができますか?

ありがとうございます。 BR、

EDIT:分割する文字列の長さを事前に知ることはできません。

+0

事前に列数を知っていますか?そうでない場合は、データフレームを一度スキャンして取得するのは費用がかかりますか? – IanS

+0

こんにちは。私たちは分かりませんが、数字は決して6列以上にならないと考えています – Cascador84

答えて

1

if len(x.split(" "))>i else None 

あなたのコード

for i in range(6): 
    df["a{}".format(i)] = df[a].apply(lambda x: x.split(' ')[i] if len(x.split(' ')>i else None) 
+0

こんにちは。あなたが言うように、私はほとんどそこにいます:) 事実、あなたのコード(依然として範囲外のエラー)であれば、私は最終的に以下のように変更します: 範囲内のi(6): df ["a {}" len(x.split( ''))>そうでない場合は、format(i)] = df [a] .apply(lambda x:x.split( '')[i] もっと簡単に言えば、私は気に入っています:)ありがとう。 BR – Cascador84

3

str.splitを使用して、expand=Trueを使用して、個々の分割ごとにデータフレームに拡大することができます。

NaNsで追加の列を作成できるように範囲を指定してこれらのインデックスを再作成します。後でオプションの接頭辞charを指定します。

次に、オリジナルと連結してDF'sを列方向に連結します。

str_df = df['a'].str.split(expand=True).reindex(columns=np.arange(6)).add_prefix('a') 
pd.concat([df, str_df], axis=1).replace({None:np.NaN}) 
あなたはほとんどそこにあなたがしなければならないのは、あなたの現在のラムダ関数の最後に次の小さな条件を追加することです:) だ

enter image description here

+1

こんにちはニッキル。もう一度ありがとう、それは働いた。 – Cascador84

関連する問題