使用for循环从旧数据帧行创建新的数据框列 - > N / A值

时间:2017-10-30 15:27:51

标签: pandas for-loop dataframe

我创建了一个数据帧df1:

df1 = pd.read_csv('FBK_var_conc_1.csv', names = ['Cycle', 'SQ'])  
df1 = df1['SQ'].copy()                            
df1 = df1.to_frame()                               
df1.head(n=10)


    SQ
0   2430.0
1   2870.0
2   2890.0
3   3270.0
4   3350.0
5   3520.0
6   26900.0
7   26300.0
8   28400.0
9   3230.0

然后创建了第二个数据帧df2,我想填充df 1的行值:

df2 = pd.DataFrame()
for x in range(12):
    y='Experiment %d' % (x+1)
    df2[y]= df1.iloc[3*x:3*x+3]
df2

我从df2中的实验1 - 实验12中获取了列名,第一列中填入了正确的值,但所有后续列都填充了N / A.

>       Experiment 1    Experiment 2    Experiment 3    Experiment 4    Experiment 5    Experiment 6    Experiment 7    Experiment 8    Experiment 9    Experiment
> 10    Experiment 11   Experiment 12
>     0 2430.0  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
>     1 2870.0  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
>     2 2890.0  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

过去2小时我一直在研究这个问题,但无法弄清楚为什么第1列之后的列没有填充值。

期望的输出:

Experiment 1    Experiment 2    Experiment 3    Experiment 4    Experiment 5    Experiment 6    Experiment 7    Experiment 8    Experiment 9    Experiment 10   Experiment 11   Experiment 12
2430    3270    26900   3230    2940    243000  256000  249000  2880    26100   3890    33400
2870    3350    26300   3290    3180    242000  254000  250000  3390    27900   3730    30700
2890    3520    28400   3090    3140    253000  260000  237000  3510    27400   3760    29600

1 个答案:

答案 0 :(得分:1)

我发现了这个问题。

我必须使用.values

所以循环的最后一行必须是:

df2[y] = df1.iloc[3*x:3*x+3].values

我得到正确的输出