我需要从一些数组中创建一个DataFrame - 一个(allReturns
),其大小为nxm(即二维),而其他数组(allID
,value
)则只是nx 1(即一维)。我正在做的那一刻:
allReturnColIdx = np.arange(np.shape(allReturns)[1])
df = PA.DataFrame(data = allReturns, columns = allReturnColIdx)
df['allID'] = allID
df['value'] = value
然后,当我想要读取allReturns
值时,我必须执行以下操作:
df[allReturnColIdx]
必须有更好的方法,我可以在一行中创建DataFrame,并且能够一次性引用我的所有返回,而不必求助于数字索引(allReturnColIdx
)。
答案 0 :(得分:0)
你的问题对我来说并不是很清楚。事实上,似乎有两个问题,似乎都不是一个问题,这会妨碍你的代码工作,所以我不太清楚问题是什么。但我会尝试回答你所写的内容。
首先,您要问如何在一行中创建DataFrame。我不确定你的例子为什么这是必要的。你拥有的四条线非常清晰。如果没有提供列,则np.arange()是创建索引的默认值。所以我相信如果省略索引的代码,那就更清洁了:
df = PA.DataFrame(data = allReturns)
df['allID'] = allID
df['value'] = value
对我来说就像一行代码一样好。此外,DataFrame constructor可以采用'数组,常量或类似列表的对象'包括dicts。所以,如果你坚持,你可以把所有这些塞进一条线;它可以说是不太可读。
然后,您的第二个问题询问访问权限。 DataFrame有all kinds of indexing。
具体来说,对于您的示例,您总是附加两列;那么你想以更方便的方式访问它们?对我来说,这是.iloc索引的一个很好的用例。
df.iloc[:,:-2]
上面的行返回DataFrame的所有行,以及除最后两列之外的所有行。我认为这就是你要求的。
这是我用来验证我写的所有内容的一大块代码。希望能帮助到你。如果这不是你想要的,我建议你澄清你的问题。
all_returns = np.random.randn(6, 4)
df = pd.DataFrame(all_returns)
print df
df = pd.DataFrame(all_returns, columns=np.arange(np.shape(all_returns)[1]))
print df
all_id = np.random.randn(6,1)
value = np.random.randn(6,1)
df['all_id'] = all_id
df['value'] = value
print df
print df.iloc[:,:-2]