假设我有一个包含表格列
的DF0 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中使用新列,因此我不限于更改源列(因为我在示例中重用它)。 谢谢!
答案 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