将数组列表作为列附加到具有相同列索引的熊猫数据框中
Posted
技术标签:
【中文标题】将数组列表作为列附加到具有相同列索引的熊猫数据框中【英文标题】:Append a list of arrays as column to pandas Data Frame with same column indices 【发布时间】:2015-05-19 06:21:42 【问题描述】:我有一个数组列表(一维 numpy 数组)(a_)和一个列表(l_),并希望有一个 DataFrame 将它们作为其列。它们看起来像这样:
a_: [array([381]), array([376]), array([402]), array([400])...]
l_: [1.5,2.34,4.22,...]
我可以这样做:
df_l = pd.DataFrame(l_) df_a = pd.DataFrame(a_) df = pd.concat([df_l, df_a], axis=1)
有没有一种更短的方法?我尝试使用pd.append
:
df_l = pd.DataFrame(l_) df_l = df_l.append(a_)
但是,由于列索引均为 0,因此它将 a_ 添加到数据框列的末尾,从而产生单个列。有没有这样的:
l_ = l_.append(a_).reset(columns)
为附加数组设置一个新的列索引?好吧,显然这不起作用!
想要的输出是这样的:
0 0 0 1.50 381 1 2.34 376 2 4.22 402
...
谢谢。
【问题讨论】:
谢谢分享。很好的例子,很容易理解……为我工作!! 【参考方案1】:建议:
df_l = pd.DataFrame(l_)
df_1['a_'] = pd.Series(a_list, index=df_1.index)
示例 #1:
L = list(data)
A = list(data)
data_frame = pd.DataFrame(L)
data_frame['A'] = pd.Series(A, index=data_frame.index)
示例 #2 - 系列长度相同(创建系列并将索引设置为与现有数据框相同):
In [33]: L = list(item for item in range(10))
In [34]: A = list(item for item in range(10,20))
In [35]: data_frame = pd.DataFrame(L,columns=['L'])
In [36]: data_frame['A'] = pd.Series(A, index=data_frame.index)
In [37]: print data_frame
L A
0 0 10
1 1 11
2 2 12
3 3 13
4 4 14
5 5 15
6 6 16
7 7 17
8 8 18
9 9 19
示例 #3 - 不同的系列长度(创建系列并让 pandas 处理索引匹配):
In [45]: not_same_length = list(item for item in range(50,55))
In [46]: data_frame['nsl'] = pd.Series(not_same_length)
In [47]: print data_frame
L A nsl
0 0 10 50
1 1 11 51
2 2 12 52
3 3 13 53
4 4 14 54
5 5 15 NaN
6 6 16 NaN
7 7 17 NaN
8 8 18 NaN
9 9 19 NaN
根据您的 cmets,您似乎想加入您的列表列表。我假设它们在列表结构中,因为 array()
不是 python 中的方法。为此,您需要执行以下操作:
In [63]: A = [[381],[376], [402], [400]]
In [64]: A = [inner_item for item in A for inner_item in item]
In [65]: print A
[381, 376, 402, 400]
然后使用新数组创建系列并按照上述步骤添加到您的数据框。
【讨论】:
非常感谢@kennes913,它可以工作,但我的数组就像 [array([381]), array([376])...],所以你的答案给出了一个类似 [ 381],[376] ...那我该如何去掉括号呢? 我不清楚问题是什么。你能打印输出吗? 实际上你的答案有效,但我认为我没有很好地解释我的问题。我现在已经更新了。我有两个列表,问题在于 a_ 列表,它是数组列表 (a_: [array([381]), array([376]), array([402]), array([400]) ...]),所以使用你的答案的输出是:[381],[376],[402],...而我想得到:381、376、402 ....我希望我很清楚. 谢谢,但没有。如问题中所述,我已经有了将两个列表都更改为数据框然后使用pd.concat
的解决方案。我想知道是否有更有效的方法来做到这一点。您的答案非常有用,但在代码中添加了更多行。感谢您抽出宝贵时间。以上是关于将数组列表作为列附加到具有相同列索引的熊猫数据框中的主要内容,如果未能解决你的问题,请参考以下文章
pandas读取csv数据header参数指定作为列索引的行索引列表形成复合(多层)列索引使用reset_index函数把行索引重置为列数据(level参数设置将原行索引中的指定层转化为列数据)
pandas读取csv数据header参数指定作为列索引的行索引列表形成复合(多层)列索引使用reset_index函数把行索引重置为列数据(level参数设置将原行索引中的指定层转化为列数据)
pandas读取csv数据header参数指定作为列索引的行索引列表形成复合(多层)列索引使用set_index函数把数据列转化为行索引(keys参数指定需要被转化的层列索引)
pandas读取csv数据header参数指定作为列索引的行索引列表形成复合(多层)列索引使用set_index函数把数据列转化为行索引(keys参数指定需要被转化的层列索引)