Python:pandas DF

时间:2015-06-04 07:33:56

标签: python performance pandas split

假设我有一个包含表格列

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

并且假设我希望将这些列拆分为'。'只使用'之后的元素。'。一个天真的方法是

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

这很有效。而且对于大型桌来说它非常慢。有没有人知道如何加快这个过程?我可以在DF中使用新列,因此我不限于更改源列(因为我在示例中重用它)。 谢谢!

2 个答案:

答案 0 :(得分:4)

pandas具有字符串方法,可以在没有循环的情况下有效地执行此类操作( kill 性能)。在这种情况下,您可以使用.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

答案 1 :(得分:1)

对于大型数据框,使用map而不是for循环必须更快:

%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