动态熊猫数据框生成

时间:2018-07-27 12:57:03

标签: python pandas

这是我编写的用于生成包含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 个答案:

答案 0 :(得分:2)

为了获得更好的性能,我建议使用create DataFrame numpy函数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

答案 1 :(得分:1)

IIUC,使用Activity并听写

str.format

答案 2 :(得分:0)

您可以使用np.random.randint创建完整的随机值数组,使用f字符串(Python 3.6+)创建带有列表理解的列表命名,使用pd.DataFrame.assign创建带有np.arange的列表定义“ id_col”:

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
相关问题