2017-02-04 92 views
0

我有一个熊猫数据帧从构成这样一个CSV文件中读取值的其余部分:在大熊猫追加一个列表的列在复制

x_column y_column number_column 
---   ----  ---- 
---   ----  ---- 
xxx   yyyy  1 
xxx   yyyy  2 
xxx   yyyy  35 
xxx   yyyy  42 

与破折号行代表了一些额外的数据在我想保留的csv文件的开头。

我有一个数字列表,我想要附加到'number_column'。该列表本身长500,000个值。我想将列表追加到列中,保持number_column的现有值在同一个地方并且未被更改。

我还希望x_column和y_column的值对于刚添加的每一行都是相同的,如示例中所示。我目前的做法仅仅是一个简单的循环,追加值一次一个:

for num in number_list: 

     data_df = data_df.append(pd.DataFrame({'x_column': 'xxx', 'y_column': 'yyy', 'number_column': num}, index=[0]), ignore_index=True) 

我的问题是,如果有这样的一个更快的方法?目前的做法需要很长时间才能完成。

回答

2

请勿在循环中调用data_df = data_df.append(...),因为这会导致quadratic copying,这对性能非常不利。而是附加到列表中,构建一个DataFrame,然后将其连接到原始DataFrame上:

tmp = pd.DataFrame({'x_column': 'xxx', 'y_column': 'yyy', 'number_column': number_list}) 
data_df = pd.concat([data_df, tmp])