假设您的数据如下所示:
import pandas as pdimport numpy as npnp.random.seed(2015)df = pd.Dataframe([])for i in range(5): data = dict(zip(np.random.choice(10, replace=False, size=5), np.random.randint(10, size=5))) data = pd.Dataframe(data.items()) data = data.transpose() data.columns = data.iloc[0] data = data.drop(data.index[[0]]) df = df.append(data)print('{}n'.format(df))# 0 0 1 2 3 4 5 6 7 8 9# 1 6 NaN NaN 8 5 NaN NaN 7 0 NaN# 1 NaN 9 6 NaN 2 NaN 1 NaN NaN 2# 1 NaN 2 2 1 2 NaN 1 NaN NaN NaN# 1 6 NaN 6 NaN 4 4 0 NaN NaN NaN# 1 NaN 9 NaN 9 NaN 7 1 9 NaN NaN然后可以将其替换为
np.random.seed(2015)data = []for i in range(5): data.append(dict(zip(np.random.choice(10, replace=False, size=5), np.random.randint(10, size=5))))df = pd.Dataframe(data)print(df)
换句话说,不要为每一行形成一个新的Dataframe。相反,请收集字典列表中的所有数据,然后
df =pd.Dataframe(data)在循环外部最后调用一次。
每次调用都
df.append需要为具有新行的新Dataframe分配空间,将所有数据从原始Dataframe复制到新Dataframe,然后将数据复制到新行。所有这些分配和复制使
df.append循环调用效率非常低。复制的时间成本随行数成倍增长。一次调用Dataframe的代码不仅更易于编写,而且性能会更好-
复制的时间成本与行数成线性增长。



