假设我有一个数据框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]
其中A
,B
和C
是列和行的元组(类似于column_and_row
)。
沿着同样的路线,如何使用Series
?,例如:
import pandas as pd
srs = pd.Series()
我希望添加一个项目,其中包含索引'foo'
和值2
,以便:
srs['foo']
返回2
?
注意:
我知道 none 这些是创建dataframes
或series
的有效方法,但是我需要一个解决方案,当我没有时,我可以通过这种方式有机地扩展我的结构其他选择。
答案 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,您也可以使用append
或concat
,但仅对单个单元格执行此操作没有意义。 DataFrame是表格式的,因此您只能添加整行或整列。 The documentation有很多例子,other questions就是这个例子。
编辑:显然,您实际上可以使用df.set_value('newRow', 'newCol', newVal)
设置单个值。但是,如果该行/列不存在,则实际上将创建一个新的行和/或列,其中创建的行/列中的其余值用NaN填充。请注意,在这种情况下,系统会返回一个新对象,因此您必须df = df.set_value('newRow', 'newCol', newVal)
来修改原始对象。
然而,现在问题如何,这将是低效的。 Pandas数据结构基于Numpy,并且从根本上依赖于提前知道数组的大小。您可以添加行和列,但每次执行此操作时,都会创建全新的数据结构,因此如果您执行此操作,则会比使用普通的Python列表/ dicts慢。