2015-06-04 31 views
3

假設我有一個包含表單的Python:「」在大熊貓DF高效分離列

0  A.1 
1  A.2 
2  B.3 
3  4.C 

並假設我想要分割該列的列中的DF只使用'。'後面的元素。一種天真的做法是:

for i in range(len(tbl)): 
    tbl['column_name'].iloc[i] = tbl['column_name'].iloc[i].split('.',1)[1] 

這是有效的。大桌子的速度很慢。有沒有人有關於如何加快這個過程的想法?我可以在DF中使用新列,因此我不限於更改源列(因爲我在示例中重複使用了它)。 謝謝!

回答

1

對於一個的大數據幀,這是必須更快地使用map,而不是一個循環:

%timeit df['newcol'] = df.column_name.map(lambda x: x.split('.')[1]) 
100 loops, best of 3: 10.7 ms per loop 

%timeit for i in range(len(df)): df['newcol'].iloc[i] = df['column_name'].iloc[i].split('.',1)[1] 
1 loops, best of 3: 7.63 s per loop 
4

pandas具有字符串方法能夠有效地做這樣的事情沒有循環(這性能)。在這種情況下,你可以使用.str.split

>> import pandas as pd 
>> df = pd.DataFrame({'a': ['A.1', 'A.2', 'B.3', 'C.4']}) 
>> df 
    a 
0 A.1 
1 A.2 
2 B.3 
3 C.4 
>> df.a.str.split('.').apply(pd.Series) 
    0 1 
0 A 1 
1 A 2 
2 B 3 
3 C 4 
+0

阿米 - Tavory工作就像一個奇蹟(慢奇蹟,但並不是一個小時奇蹟:-))! @maxymoo - 謝謝你的回答。它比原生熊貓慢一些,但比普通的「for」循環要快得多!可能對於某些情況,這種情況甚至比熊貓解析更好。非常感謝你。 – user3861925