赞
踩
我觉得在熊猫身上没有什么特别好的方法。
每当一个DataFrame包含一列列表,并且您想进行某种需要在列表上迭代的计算,您就必须为列中的每个项(即list)调用一次Python函数。这会影响性能,因为这里无法应用熊猫的快速矢量化操作。这个故事的寓意是尽可能避免将列表放入数据帧中。在
(当然,在您的案例中,您似乎希望在特定的
另一个应用程序的格式。如果这需要数据帧中的列表,那么
它。)
正如您所提到的,您可以迭代这些行。您可以使用iterrows或itertuples。我将使用itertuples,因为它往往更快:import itertools as IT
import numpy as np
import pandas as pd
Rs = ['R{}'.format(i) for i in range(1,251)]
Cs = ['C1', 'C2']
df = pd.DataFrame({'Names': [Rs, Cs], 'Count': ['n',0],
'PartNr':['1234-5678','1234-6789']})
def chunks(seq, n):
# http://stackoverflow.com/a/312464/190597 (Ned Batchelder)
""" Yield successive n-sized chunks from seq."""
for i in range(0, len(seq), n):
yield seq[i:i + n]
result = []
for row in df.itertuples():
result.append(pd.DataFrame({'Names': list(chunks(row.Names, 100)),
'Count':row.Count,
'PartNr':row.PartNr}))
result = pd.concat(result, axis=0, ignore_index=True)
print(result)
收益率
^{pr2}$
在itertuplesfor-loop内,为每一行构造一个新的数据帧。
数据帧被收集到一个名为result的列表中。在for-loop之后
完成后,数据帧列表被连接到单个数据帧中。在
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。