将单个项目和项目序列添加到数据框架和系列

时间:2013-04-04 00:39:14

标签: python pandas

假设我有一个数据框df

import pandas as pd
df = pd.DataFrame()

我有以下元组和值:

column_and_row = ('bar', 'foo')
value = 56

我如何才能最轻松地这个元组添加到我的数据框中,以便:

df['bar']['foo'] 

返回56

如果我有这样的元组列表和值列表怎么办? e.g。

columns_and_rows = [A, B, C, ...]
values = [5, 10, 15]

其中ABC是列和行的元组(类似于column_and_row)。

沿着同样的路线,如何使用Series?,例如:

import pandas as pd
srs = pd.Series()

我希望添加一个项目,其中包含索引'foo'和值2,以便:

srs['foo'] 

返回2

注意: 我知道 none 这些是创建dataframesseries的有效方法,但是我需要一个解决方案,当我没有时,我可以通过这种方式有机地扩展我的结构其他选择。

1 个答案:

答案 0 :(得分:3)

对于系列,你可以使用append来完成,但你必须先从你的价值创建一个系列:

>>> print x
A    1
B    2
C    3
>>> print x.append( pandas.Series([8, 9], index=["foo", "bar"]))
A      1
B      2
C      3
foo    8
bar    9

对于DataFrame,您也可以使用appendconcat,但仅对单个单元格执行此操作没有意义。 DataFrame是表格式的,因此您只能添加整行或整列。 The documentation有很多例子,other questions就是这个例子。

编辑:显然,您实际上可以使用df.set_value('newRow', 'newCol', newVal)设置单个值。但是,如果该行/列不存在,则实际上将创建一个新的行和/或列,其中创建的行/列中的其余值用NaN填充。请注意,在这种情况下,系统会返回一个新对象,因此您必须df = df.set_value('newRow', 'newCol', newVal)来修改原始对象。

然而,现在问题如何,这将是低效的。 Pandas数据结构基于Numpy,并且从根本上依赖于提前知道数组的大小。您可以添加行和列,但每次执行此操作时,都会创建全新的数据结构,因此如果您执行此操作,则会比使用普通的Python列表/ dicts慢。