Python:DF中高效的拆分列
假设我有一个DF,它包含一个表单的列Python:DF中高效的拆分列,python,performance,pandas,split,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中使用新列,因此我不局限于更
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中使用新列,因此我不局限于更改源列(因为我在示例中重用了它)。
谢谢 对于大型数据帧,使用
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
pandas
具有字符串方法,可以在不使用循环的情况下高效地执行这些操作(这会降低性能)。在这种情况下,您可以使用:
阿美-塔沃里像奇迹一样工作(缓慢的奇迹,但不是2小时的奇迹:-)@谢谢你的回答。它比本地大熊猫慢一些,但比常规的“for”循环快得多!可能在某些情况下,这种情况甚至比熊猫解析更好。非常感谢你们两位。
>> 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