2016-07-03 5 views
1

私は次の形式を持っているcsvファイルで働いている:私は、整数様およびdf['Sequence']のタイプにすることdf['Id']のタイプのデータフレームにこれを読みたいcsv stringをpandasのリストに変換するにはどうすればよいですか?

"Id","Sequence" 
3,"1,3,13,87,1053,28576,2141733,508147108,402135275365,1073376057490373,9700385489355970183,298434346895322960005291,31479360095907908092817694945,11474377948948020660089085281068730" 
7,"1,2,1,5,5,1,11,16,7,1,23,44,30,9,1,47,112,104,48,11,1,95,272,320,200,70,13,1,191,640,912,720,340,96,15,1,383,1472,2464,2352,1400,532,126,17,1,767,3328,6400,7168,5152,2464,784,160,19,1,1535,7424" 
8,"1,2,4,5,8,10,16,20,32,40,64,80,128,160,256,320,512,640,1024,1280,2048,2560,4096,5120,8192,10240,16384,20480,32768,40960,65536,81920,131072,163840,262144,327680,524288,655360,1048576,1310720,2097152" 
11,"1,8,25,83,274,2275,132224,1060067,3312425,10997342,36304451,301432950,17519415551,140456757358,438889687625,1457125820233,4810267148324,39939263006825,2321287521544174,18610239435360217" 

リストのように。

私は現在、次のクルージのコードがあります。

def clean(seq_string): 
    return list(map(int, seq_string.split(','))) 

# Read data 
training_data_file = "data/train.csv"  
train = pd.read_csv(training_data_file) 
train['Sequence'] = list(map(clean, train['Sequence'].values)) 

をこれが動作するように見えますが、同じことがパンダとnumpyのを使用してネイティブに達成することができたような気がします。

誰もが勧告を持っていますか?

答えて

4

あなたがSequence列にconverterを指定することができます。

convertersdictは、特定の列に 値を変換するための関数のNone

Dictのデフォルト。

df = pd.read_csv(training_data_file) 
df['Sequence'] = df['Sequence'].str.split(',') 

がintに各要素を変換するには:キーは、整数または列 ラベル

train = pd.read_csv(training_data_file, converters={'Sequence': clean}) 
+0

美しいです。このような単純なものだと思った。 :)乾杯! – erip

0

また、そのSequence除き、作品これは、文字列のリストの代わりに、int型のリストで次のいずれかとなります。

df = pd.read_csv(training_data_file) 
df['Sequence'] = df['Sequence'].str.split(',').apply(lambda s: list(map(int, s))) 
+0

そして、それをintのリストに変換したいのであれば、 '.convert_objects(convert_numeric = True)'を追加することができます。 – erip

+0

これはコマンドが廃止され、リストをループして手動で変換する必要があるようです。しかし、これは何とか元のソリューションに戻ってきます。 – Psidom

関連する問題