2017-05-08 94 views
-2

在數據幀的列有值,'abc,def,ghi'。我想打一個這樣的數組:['abc','def','ghi']大熊貓數據框中列有逗號字符串如何將它轉換成一個列表

+0

這給了更詳細的答案http://stackoverflow.com/questions/40784200/pandas-convert-column-to-list – bigbounty

+0

你嘗試過這麼遠嗎? – Nathan

+0

的可能的複製[擺脫熊貓數據幀列的列表(http://stackoverflow.com/questions/22341271/get-list-from-pandas-dataframe-column) –

回答

1

使用str.split

df['col'] = df['col'].str.split(',') 

樣品:

df = pd.DataFrame({'col':['abc,def,ghi','abc,def,ghi']}) 
df['col'] = df['col'].str.split(',') 
print (df) 
       col 
0 [abc, def, ghi] 
1 [abc, def, ghi] 

print (df.loc[0, 'col']) 
['abc', 'def', 'ghi'] 

print (type(df.loc[0, 'col'])) 
<class 'list'> 

如果從未NaN值使用列表理解:

df['col'] = [x.split(',') for x in df['col'].values.tolist()] 
print (df) 
       col 
0 [abc, def, ghi] 
1 [abc, def, ghi] 
+0

但我想它像這樣[「ABC」,」 DEF ' 'GHI'] – Aravindh

+0

嗯,你需要雙'''?因爲如果是字符串,'''是默認的。 – jezrael

+0

它工作正常的我。非常感謝。 – Aravindh

1

考慮據幀df用隨機數,以逗號分隔的字符串。

np.random.seed([3,1415]) 
k = 10 
df = pd.DataFrame(
    np.random.choice(list('ABCD,'), (k, 20)) 
).sum(1).str.strip(',').str.replace(',+', ',').to_frame('col1') 
df 

        col1 
0 ADCDCCDCDACAA,ACCA,B 
1  DC,DDD,DBDA,CCAC 
2 A,B,CCAC,DB,C,CD,D 
3 ADDBAA,DA,BD,C,AACA 
4 DADBB,D,DBD,ADCAADB 
5 CBCBA,CA,B,AA,CDCBDB 
6 BD,D,DDB,AC,B,C,ABBA 
7 C,CABBBADCD,DBCC,ACD 
8 CC,A,BCAAAACBBA,BD 
9 AC,A,ADBBD,BDCCDDABD 

我喜歡用numpy小號功能分裂

df.assign(col1=np.core.defchararray.split(df.col1.values.astype(str), ',')) 

          col1 
0  [ADCDCCDCDACAA, ACCA, B] 
1   [DC, DDD, DBDA, CCAC] 
2 [A, B, CCAC, DB, C, CD, D] 
3  [ADDBAA, DA, BD, C, AACA] 
4  [DADBB, D, DBD, ADCAADB] 
5 [CBCBA, CA, B, AA, CDCBDB] 
6 [BD, D, DDB, AC, B, C, ABBA] 
7  [C, CABBBADCD, DBCC, ACD] 
8  [CC, A, BCAAAACBBA, BD] 
9  [AC, A, ADBBD, BDCCDDABD] 

快速的小數據

%timeit df.assign(col1=np.core.defchararray.split(df.col1.values.astype(str), ',')) 
1000 loops, best of 3: 204 µs per loop 

%timeit df.assign(col1=df['col1'].str.split(',')) 
1000 loops, best of 3: 327 µs per loop 

%timeit df.assign(col1=[x.split(',') for x in df['col1'].values.tolist()]) 
1000 loops, best of 3: 210 µs per loop 

沒有那麼快,大型DataA的

np.random.seed([3,1415]) 
k = 10000 
df = pd.DataFrame(
    np.random.choice(list('ABCD,'), (k, 100)) 
).sum(1).str.strip(',').str.replace(',+', ',').to_frame('col1') 

%timeit df.assign(col1=np.core.defchararray.split(df.col1.values.astype(str), ',')) 
10 loops, best of 3: 19.6 ms per loop 

%timeit df.assign(col1=df['col1'].str.split(',')) 
100 loops, best of 3: 13.5 ms per loop 

%timeit df.assign(col1=[x.split(',') for x in df['col1'].values.tolist()]) 
100 loops, best of 3: 11.5 ms per loop 
+0

@jezrael非常快! – piRSquared

相關問題