使用二维numpy数组有效填充熊猫数据帧

时间:2019-02-10 12:21:52

标签: python python-3.x pandas numpy

我有一个二维numpy数组,其每行包含三个元素-['dataframe_column_name','dataframe_index','value']。 现在,我尝试使用iloc double for循环填充pandas数据帧,但是速度很慢。有没有更快的方法可以做到这一点。我对熊猫有点陌生,因此很抱歉,这是很基本的事情。 这是代码片段:

my_nparray = [['a', 1, 123], ['b', 1, 230], ['a', 2, 321]]
for r in range(my_nparray.shape[0]):
    [col, ind, value] = my_nparray[r]
    df.iloc[col][ind] = value

当my_nparray很大时,这会花费很多时间,还有其他方法吗?

最初假设我可以创建此数据框:

  'a' 'b'
1 NaN NaN
2 NaN NaN

我希望输出为:

  'a' 'b'
1 123 230
2 321 NaN

2 个答案:

答案 0 :(得分:0)

您可以先使用from_records,然后再使用pivot

df = pd.DataFrame.from_records(my_nparray, index=1).pivot(columns=0)

       2
0      a      b
1
1  123.0  230.0
2  321.0    NaN

这指定索引使用数组中的字段1,而数据透视表将Series 0用于列。

然后,我们可以在列和索引上重置MultiIndex:

df.columns = df.columns.droplevel(None)
df.columns.name = None
df.index.name = None

       a      b
1  123.0  230.0
2  321.0    NaN

答案 1 :(得分:0)

DataFrame构造函数与DataFrame.pivotDataFrame.rename_axis结合使用:

df = pd.DataFrame(my_nparray).pivot(1,0,2).rename_axis(index=None, columns=None)
print (df)
       a      b
1  123.0  230.0
2  321.0    NaN