代码之家  ›  专栏  ›  技术社区  ›  blue-sky

动态熊猫数据帧生成

  •  1
  • blue-sky  · 技术社区  · 7 年前

    下面是我为生成包含4列的数据帧而编写的代码

    num_rows = 10
    
    df = pd.DataFrame({ 'id_col' : [x+1 for x in range(num_rows)] , 'c1': [randint(0, 9) for x in range(num_rows)], 'c2': [randint(0, 9) for x in range(num_rows)], 'c3': [randint(0, 9) for x in range(num_rows)] })
    df
    

    print(df) 渲染:

    id_col  c1  c2  c3
    0       1   3   1   5
    1       2   0   2   4
    2       3   1   2   5
    3       4   0   5   6
    4       5   0   0   1
    5       6   6   5   8
    6       7   1   6   8
    7       8   5   8   8
    8       9   1   5   2
    9      10   2   9   2
    

    我已经设置了要通过 num_rows 变量。

    如何动态生成1000个列,其中每个列前面都有“c”。所以列 c1,c2,c3....c1000 是否在每列包含10行的位置生成?

    3 回复  |  直到 7 年前
        1
  •  2
  •   jezrael    7 年前

    DataFrame numpy.random.randint DataFrame.insert

    np.random.seed(458)
    
    N = 15
    M = 10
    df = pd.DataFrame(np.random.randint(10, size=(M, N)))
    df.columns = ['c{}'.format(x+1) for x in df.columns]
    df.insert(0, 'idcol', np.arange(M))
    
    print (df)
       idcol  c1  c2  c3  c4  c5  c6  c7  c8  c9  c10  c11  c12  c13  c14  c15
    0      0   8   2   1   6   2   1   0   9   7    8    0    5    5    6    0
    1      1   0   2   5   0   0   2   5   2   9    2    1    0    0    5    0
    2      2   5   1   3   5   4   5   3   0   2    1    7    8    9    5    4
    3      3   8   7   7   0   1   3   6   7   5    8    8    9    8    5    5
    4      4   2   8   1   7   3   7   4   6   0    7    0    9    4    0    4
    5      5   9   2   1   6   1   9   5   6   7    4    6    1    7    3    7
    6      6   1   9   3   9   7   7   2   7   9    8    2    7    2    5    5
    7      7   7   6   6   6   4   2   9   0   6    5    7    0    0    4    9
    8      8   6   4   2   1   3   1   7   0   4    3    0    5    4    7    7
    9      9   1   3   5   7   2   2   1   5   6    1    9    5    9    6    3
    

    numpy.hstack id

    np.random.seed(458)
    
    arr = np.hstack([np.arange(M)[:, None], np.random.randint(10, size=(M, N))])
    df = pd.DataFrame(arr)
    df.columns = ['idcol'] + ['c{}'.format(x) for x in df.columns[1:]]
    print (df)
       idcol  c1  c2  c3  c4  c5  c6  c7  c8  c9  c10  c11  c12  c13  c14  c15
    0      0   8   2   1   6   2   1   0   9   7    8    0    5    5    6    0
    1      1   0   2   5   0   0   2   5   2   9    2    1    0    0    5    0
    2      2   5   1   3   5   4   5   3   0   2    1    7    8    9    5    4
    3      3   8   7   7   0   1   3   6   7   5    8    8    9    8    5    5
    4      4   2   8   1   7   3   7   4   6   0    7    0    9    4    0    4
    5      5   9   2   1   6   1   9   5   6   7    4    6    1    7    3    7
    6      6   1   9   3   9   7   7   2   7   9    8    2    7    2    5    5
    7      7   7   6   6   6   4   2   9   0   6    5    7    0    0    4    9
    8      8   6   4   2   1   3   1   7   0   4    3    0    5    4    7    7
    9      9   1   3   5   7   2   2   1   5   6    1    9    5    9    6    3
    
        2
  •  1
  •   rafaelc    7 年前

    str.format

    num_rows = 10
    num_cols = 15
    
    df = pd.DataFrame({ 'c{}'.format(n):  [randint(0, 9) for x in range(num_rows)] for n in range(num_cols)}, 
                      index=[x+1 for x in range(num_rows)] , )
        c0  c1  c2  c3  c4  c5  c6  c7  c8  c9
    1   1   6   2   1   3   1   8   8   2   0
    2   2   6   2   2   5   7   4   1   6   2
    3   1   2   6   8   7   5   5   7   2   2
    4   5   5   3   3   4   7   8   1   8   6
    5   7   2   8   6   5   6   2   0   0   4
    6   8   2   4   4   6   3   0   1   0   2
    7   5   6   8   5   1   0   4   8   4   7
    8   1   5   4   5   2   4   4   6   2   7
    9   5   7   7   8   5   0   2   7   3   2
    10  4   8   5   3   3   7   5   1   5   1
    
        3
  •  0
  •   jpp    7 年前

    np.random.randint pd.DataFrame.assign np.arange

    import pandas as pd, numpy as np
    
    rows = 10
    cols = 5
    minval, maxval = 0, 10
    
    df = pd.DataFrame(np.random.randint(minval, maxval, (rows, cols)),
                      columns=[f'c{i}' for i in range(1, cols+1)])\
           .assign(id_col=np.arange(1, num_rows+1))
    
    print(df)
    
       c1  c2  c3  c4  c5  id_col
    0   8   4   6   0   8       1
    1   8   3   5   9   0       2
    2   1   3   3   6   2       3
    3   6   4   1   1   7       4
    4   3   7   0   9   5       5
    5   4   6   8   8   6       6
    6   0   3   9   9   7       7
    7   0   6   1   2   4       8
    8   3   7   1   2   0       9
    9   6   6   0   5   8      10