【发布时间】:2017-05-30 04:57:20
【问题描述】:
我的目标是初始化一个空数据框并逐行填充它。最初我不知道行标签是什么(index),也不知道columns 是什么。此外,index 可以是多级的。
这是我想要完成的一个示例。
首选方法
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 语句和当前方法中的空索引声明,使其符合首选方法的路线?
【问题讨论】: