因此,我正在遍历字典,并将一堆值作为数组取出-试图将每个观察值作为一个单独的行制作一个数据框。
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
同一任务是否可以进一步划分? 数据集中还有更多的50万个数组。 谢谢
答案 0 :(得分:0)
我希望以下提到的代码对您有所帮助:
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并将该数组附加到列表中来使其更加动态。从生成的数组列表中创建数据框。另外,您可以为列添加名称(如上所示)或避免命名(只需删除列详细信息)。希望能解决您的问题
答案 1 :(得分: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