Python:高效地在pandas数据框中拆分列

3
假设我有一个包含某种形式列的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] 

这个方法可以实现,但对于大表格来说速度非常慢。有没有人有关于如何加快处理速度的想法?我可以在数据框中使用新列,因此不需要限制更改源列(例如在示例中重复使用它)。 谢谢!

2个回答

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

Ami - Tavory 的工作就像奇迹一样(虽然是缓慢的奇迹,但不是2小时的奇迹 :-))!@maxymoo - 谢谢你的回答。它比原生的pandas慢一些,但比常规的“for”循环快得多!对于某些情况来说,这种情况甚至比pandas解析更好。非常感谢你们两个。 - user3861925

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接