0
我的目標是初始化一個空的數據框並逐行填充它。起初我不知道行標籤是什麼(index
),也不知道columns
是什麼。另外,index
可以是多層次的。初始化一個空的DataFrame以進行動態分配
這是我正在努力完成的一個例子。
首選方法
import pandas as pd
import numpy as np
# Demo data which will be used to populate the dataframe
my_list = [pd.Series(np.random.rand(10), index=np.arange(10)*1e-6) for i in range(5)]
# Demo indices which will be used to index the dataframe
id1 = ['a', 'b', 'c', 'd', 'e']
id2 = [0.1, 0.2, 0.3, 0.4, 0.5]
id3 = [0, 1, 2, 3, 4]
df = pd.DataFrame()
for i1, i2, i3, s in zip(id1, id2, id3, my_list):
df.loc[(i1, i2, i3), :] = s
而且當然啦,這是不正確的,並拋出我的錯誤:
KeyError: "['a' 0.1 0] not in index"
當前的方法
目前,我解決這個問題的方法問題是我知道所有行的列標籤都是一樣的,所以一旦我回來了在第一輯中,我知道所有系列的標籤。另外,我知道索引是三個級別。因此,這裏是我做的:
df = None
idx = pd.MultiIndex(labels=[[], [], []], levels=[[], [], []], names=['id1', 'id2', 'id3'])
for i1, i2, i3, s in zip(id1, id2, id3, my_list):
if df is None:
df = pd.DataFrame(index=idx, columns=s.index)
df.loc[(i1, i2, i3)] = s
問題
什麼是接近最好的方法?是否有可能刪除循環中的if
語句和當前方法中的空索引聲明,以便它將沿着首選方法的行?
感謝您的回答。就像後續一樣,我想我應該在我的問題中指出,對於我的實際數據,我必須有一個循環才能瀏覽系列,因爲我正在從文件中讀取它們(每個系列都從HDF表的條目中讀取)。我用my_list只是一個演示... –
然後更好的是將數據從循環附加到列表並最後通過'concat'創建'DataFrame' - 也許可以幫助[this](https://stackoverflow.com/a/39850990/2901002) )回答。 – jezrael