2016-06-28 6 views
1

リストを含むいくつかの列を含むCSVファイルから読み込んだデータフレームがあります。しかし、この例では、列Bのようにパンダの文字列として終わります。この列を整数のリストを含む新しい列に変換したいと思います。合併症のカップル。 1)元の列にはNaN値がいくつかあります。これはast.literal_evalが私のために働かないようにしました。 2)可能であれば、結果リストのすべてがNANで埋められた同じ長さ(その列の最長リストの長さ)になるようにしたい。だから最終的には、各要素がintのリストであるColumn Cのように見えるはずです。これは私と同じくらい近いです。だから、私は文字列のリストを持っていますが、整数ではなく、最大長まで埋められません。まあ、少なくともそれは私がそれだと思う方法です!すべてのヘルプは非常に高く評価されるだろうと私の髪の多くを救う文字列とNANを含む列をPandasの整数のリストに変換します

Starting point: 
[0,1] 
What I want: 
[0, 1, nan] 
What I have so far: 
['0', '1'] 

::-)

import pandas as pd 
import numpy as np 
from IPython.display import display 

df = pd.DataFrame({'A' : (1,2,3), 'B': ('[0,1]',np.nan,'[0,1,2]'), \ 
    'C': ([0,1,np.nan],[np.nan,np.nan,np.nan],[0,1,2])}) 
df['D'] = df['B'].str.replace(']','').str.replace('[','').str.split('\W') 
display("Starting point: ", df['B'][0]) 
display("What I want: ", df['C'][0]) 
display("What I have so far: ", df['D'][0]) 

これは、上記から出力されます。

+1

私はあなたが最大長を取得するには、列D内のすべてのリストを反復処理する必要があると思います。次に、以下のように短いリストをすべて拡張することができます: '' 'aList.extend(np.nan *(maxLen-len(aList)))' '' –

+0

Cong Tangありがとう! – Michael

答えて

1

これは、それが行わ取得する必要があります

b = df.B.str.extract(r'\[(.*)\]', expand=False).str.split(',', expand=True).fillna(np.nan) 
df['D'] = pd.DataFrame(b.apply(lambda x: tuple(x.values))).applymap(list) 
+0

ありがとうpiRSquared! 1つの小さな追加は、(x.values)の後ろに軸= 1、それ以外の場合は行の代わりに列に沿ってリストを行います。したがって、次のようになります:df ['D'] = pd.DataFrame(b.apply(lambda x:tuple(x.values)、axis = 1))。applymap(list) – Michael

関連する問題