@@ -789,47 +789,41 @@ def array_replace_from_nan_rep(ndarray[object, ndim=1] arr, object nan_rep, obje
789
789
790
790
def write_csv_rows (dict series , list data_index , int nlevels , list cols , object writer ):
791
791
792
- cdef int N, j, i
793
- cdef list rows, all_cols
792
+ cdef int N, j, i, ncols
793
+ cdef list rows
794
794
cdef object val
795
795
796
796
# In crude testing, N>100 yields little marginal improvement
797
797
N= 100
798
798
799
799
# pre-allocate rows
800
- rows = [[None ]* (nlevels+ len (cols)) for x in range (N)]
801
-
802
- all_cols = []
803
- if len (cols) < 10000 : # 10000 as in "usually"
804
- all_cols = list (enumerate (cols))
800
+ ncols = len (cols)
801
+ rows = [[None ]* (nlevels+ ncols) for x in range (N)]
805
802
806
803
j = - 1
807
804
if nlevels == 1 :
808
- for j, idx in enumerate ( data_index):
805
+ for j in range ( len ( data_index) ):
809
806
row = rows[j % N]
810
- row[0 ] = idx
811
- for i, col in (all_cols or enumerate (cols)):
812
- val = series[col][j]
813
- row[nlevels+ i] = np.asscalar(val) if isinstance (val,np.number) else val
807
+ row[0 ] = data_index[j]
808
+ for i in range (ncols):
809
+ row[nlevels+ i] = series[cols[i]][j]
814
810
815
811
if j >= N- 1 and j % N == N- 1 :
816
812
writer.writerows(rows)
817
813
elif nlevels > 1 :
818
- for j, idx in enumerate ( data_index):
814
+ for j in range ( len ( data_index) ):
819
815
row = rows[j % N]
820
- row[:nlevels] = list (idx)
821
- for i, col in (all_cols or enumerate (cols)):
822
- val = series[col][j]
823
- row[nlevels+ i] = np.asscalar(val) if isinstance (val,np.number) else val
816
+ row[:nlevels] = list (data_index[j])
817
+ for i in range (ncols):
818
+ row[nlevels+ i] = series[cols[i]][j]
824
819
825
820
if j >= N- 1 and j % N == N- 1 :
826
821
writer.writerows(rows)
827
822
else :
828
- for j, idx in enumerate ( data_index):
823
+ for j in range ( len ( data_index) ):
829
824
row = rows[j % N]
830
- for i, col in (all_cols or enumerate (cols)):
831
- val = series[col][j]
832
- row[nlevels+ i] = np.asscalar(val) if isinstance (val,np.number) else val
825
+ for i in range (ncols):
826
+ row[nlevels+ i] = series[cols[i]][j]
833
827
834
828
if j >= N- 1 and j % N == N- 1 :
835
829
writer.writerows(rows)
0 commit comments