Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:DF中高效的拆分列_Python_Performance_Pandas_Split - Fatal编程技术网

Python: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中使用新列,因此我不局限于更

假设我有一个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