将多个数组转换为Pandas数据框

3

所以,我正在遍历一个字典,并将一堆值作为数组取出来 - 尝试用每个观测值作为单独的行创建一个数据框。

X1 =[]
for k,v in DF_grp:
    date = v['Date'].astype(datetime)
    usage = v['Usage'].astype(float)
    comm = v['comm'].astype(float)
    mdf = pd.DataFrame({'Id' : k[0],'date':date,'usage':usage, 'comm':comm})
    mdf['used_ratio'] = ((mdf['used']/mdf['comm']).round(2))*100
    ts = pd.Series(mdf['usage'].values, index=mdf['date']).sort_index(ascending=True)
    ts2 = pd.Series(mdf['used_ratio'].values, index = mdf['date']).sort_index(ascending=True)
    ts2 = ts2.dropna()
    data = ts2.values.copy()
    if len(data) == 10:
        X1 =np.append(X1,data, axis=0)
        print(X1)

[0,0,0,0,1,0,0,0,1]
[1,2,3,4,5,6,7,8,9]
[0,5,6,7,8,9,1,2,3]
....

同样地,问题是如何将所有这些数组捕获到一个单独的DataFrame中,使其看起来像下面这样:
[[0,0,0,0,1,0,0,0,1]] --- #row 1 in dataframe 
[[1,2,3,4,5,6,7,8,9]] --- #row 2 in dataframe

如果同一任务可以进一步分解? 数据集中有500K以上的数组。 谢谢

2个回答

3
我希望下面的代码能够帮到您:
arr2 = [0,0,0,0,1,0,0,0,1]
arr3 = [1,2,3,4,5,6,7,8,9]
arr4 = [0,5,6,7,8,9,1,2,3]

li = [arr2, arr3, arr4]
pd.DataFrame(data = li, columns= ["c1", "c2", "c3", "c4", "c5","c6", "c7", "c8", "c9"])

您可以通过创建一个temp_arr并将该数组附加到列表中,从而使其更具动态性。然后从生成的数组列表创建数据框架。此外,您可以向列添加名称(如上所示),或避免对它们进行命名(只需删除列详细信息)。希望这能解决您的问题。


现在编辑了问题,我有超过500K个数组。 - harold_noobie
为了正确理解,您有500,000个数组,每个数组有多少个元素? - Neha Bhushan
元素的数量不同,但目前我只关注长度为10的情况。 - harold_noobie

0
在第二行声明一个空的数据框,即在X1=[]下方使用代码df = pd.DataFrame()。接下来,在您的IF语句中,在将值附加到X1之后,请传递以下内容:
df = pd.concat([df, pd.Series(X1)]).T

或者,

df = pd.DataFrame(np.NaN, index=range(3), columns=range(9))
for i in range(3):
    df.iloc[i,:] = np.random.randint(9)    # <----- Pass X1 here
df
#     0 1   2   3   4   5   6   7   8
# 0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0
# 1 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0
# 2 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0

谢谢,我尝试了类似的方法,但是在转置时出现了错误:“只有具有唯一值索引对象才能重新索引”。 - harold_noobie
然后使用已知的“shape”和“NaN”值声明一个数据框。稍后使用“iloc”命令进行填充。最后剪切不必要的行。 - meW
你能提供一个例子吗?我没明白。 - harold_noobie
检查我的修改后的答案。如果您事先知道数组的数量,则将该值传递到“index=range(NUMBER_OF_ARRAYS)”中。 - meW
尝试了上述方法,现在出现的错误是--“只有大小为1的数组可以转换为Python标量”。 - harold_noobie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接