索引以填充预分配的pandas数据帧

时间:2018-02-07 08:42:40

标签: python pandas numpy dataframe indexing

我有一个(简单)索引问题:我有一个预分配的数组,并希望用计算值填充它以便进一步处理。这是一个例子:

import pandas as pd
import numpy as np

meanMov = pd.DataFrame(columns=range(3),index=range(20))

value1 = np.array([23.5,-42.34,322.4])
value2 = np.array([43,-764.56,6.4556])
value3 = np.array([98.54,-26.64,86.45])

meanMov.iloc[0:5] = value1
meanMov.iloc[5:15] = value2
meanMov.iloc[15:20] = value3

这会导致以下错误:

ValueError: cannot set using a slice indexer with a different length than the value

我该如何解决这个问题?非常感谢!!

2 个答案:

答案 0 :(得分:2)

您需要:来选择所有列:

meanMov.iloc[0:5,:] = value1
meanMov.iloc[5:15,:] = value2
meanMov.iloc[15:20,:] = value3
print (meanMov)
        0       1       2
0    23.5  -42.34   322.4
1    23.5  -42.34   322.4
2    23.5  -42.34   322.4
3    23.5  -42.34   322.4
4    23.5  -42.34   322.4
5      43 -764.56  6.4556
6      43 -764.56  6.4556
7      43 -764.56  6.4556
8      43 -764.56  6.4556
9      43 -764.56  6.4556
10     43 -764.56  6.4556
11     43 -764.56  6.4556
12     43 -764.56  6.4556
13     43 -764.56  6.4556
14     43 -764.56  6.4556
15  98.54  -26.64   86.45
16  98.54  -26.64   86.45
17  98.54  -26.64   86.45
18  98.54  -26.64   86.45
19  98.54  -26.64   86.45

答案 1 :(得分:1)

您不需要预先初始化。您只需使用重复值列表调用repeat,然后在之后创建最终的DataFrame。

r = [5, 10, 5]
v = [value1, value2, value3]

pd.DataFrame(np.repeat(v, r, axis=0))

        0       1         2
0   23.50  -42.34  322.4000
1   23.50  -42.34  322.4000
2   23.50  -42.34  322.4000
3   23.50  -42.34  322.4000
4   23.50  -42.34  322.4000
5   43.00 -764.56    6.4556
6   43.00 -764.56    6.4556
7   43.00 -764.56    6.4556
8   43.00 -764.56    6.4556
9   43.00 -764.56    6.4556
10  43.00 -764.56    6.4556
11  43.00 -764.56    6.4556
12  43.00 -764.56    6.4556
13  43.00 -764.56    6.4556
14  43.00 -764.56    6.4556
15  98.54  -26.64   86.4500
16  98.54  -26.64   86.4500
17  98.54  -26.64   86.4500
18  98.54  -26.64   86.4500
19  98.54  -26.64   86.4500