当前位置: 首页 > 知识库问答 >
问题:

如何将单个项目添加到熊猫系列 [重复]

田权
2023-03-14

如何向Pandas Series实例添加单个项目?

我正在寻找以下代码:

>>> x = Series()
>>> N = 4
>>> for i in xrange(N):
>>>     x.some_appending_function(i**2)    
>>> print(x)
0 | 0
1 | 1
2 | 4
3 | 9

同样,我如何向Pandas DataFrame添加一行呢?

共有3个答案

温智明
2023-03-14

如果您有索引和值。然后,您可以添加到系列中,如下所示:

obj = Series([4,7,-5,3])
obj.index=['a', 'b', 'c', 'd']

obj['e'] = 181

这将为系列添加一个新值(在系列的末尾)。

柳俊彦
2023-03-14

TLDR:不要一个接一个地将项附加到序列,最好使用有序集合进行扩展

我认为目前形式的问题有点棘手。接受的答案确实回答了这个问题。但是我使用熊猫的次数越多,我就越明白,将项目逐个附加到系列中是一个坏主意。我会试着解释为什么熊猫初学者。

您可能认为将数据附加到给定的Series可能允许您重用某些资源,但实际上Series只是一个存储索引和值数组之间关系的容器。每个都是一个numpy.array,并且索引是不可变的。当您将索引中缺少标签的项目添加到Series时,将创建一个大小为n 1的新索引,并创建一个大小相同的新值数组。这意味着当您一个接一个地附加项目时,您将在每一步上再创建两个大小为n 1的数组。

顺便说一句,您不能按位置追加新项(您将获得一个 IndexError),并且索引中的标签不必是唯一的,也就是说,当您使用标签分配值时,您将该值分配给具有标签的所有现有项,并且在这种情况下不会追加新行。这可能会导致微妙的错误。

这个故事的寓意是,您不应该一个接一个地附加数据,您应该更好地使用有序集合进行扩展。问题是您无法在原地扩展级数。这就是为什么更好地组织代码,这样就不需要通过引用更新系列的特定实例。

如果您自己创建标签,并且它们在增加,最简单的方法是向字典中添加新的条目,然后从字典中创建一个新的序列(它对键进行排序)并将该序列追加到旧的序列中。如果键没有增加,那么您需要为新标签和新值创建两个单独的列表。

下面是一些代码示例:

In [1]: import pandas as pd
In [2]: import numpy as np

In [3]: s = pd.Series(np.arange(4)**2, index=np.arange(4))

In [4]: s
Out[4]:
0    0
1    1
2    4
3    9
dtype: int64

In [6]: id(s.index), id(s.values)
Out[6]: (4470549648, 4470593296)

更新现有项时,索引和值数组保持不变(如果不更改值的类型)

In [7]: s[2] = 14  

In [8]: id(s.index), id(s.values)
Out[8]: (4470549648, 4470593296)

但是当您添加新项目时,会生成一个新索引和新值数组:

In [9]: s[4] = 16

In [10]: s
Out[10]:
0     0
1     1
2    14
3     9
4    16
dtype: int64

In [11]: id(s.index), id(s.values)
Out[11]: (4470548560, 4470595056)

也就是说,如果您要追加多个项目,将它们收集在字典中,创建一个系列,将其附加到旧项目并保存结果:

In [13]: new_items = {item: item**2 for item in range(5, 7)}

In [14]: s2 = pd.Series(new_items)

In [15]: s2  # keys are guaranteed to be sorted!
Out[15]:
5    25
6    36
dtype: int64

In [16]: s = s.append(s2); s
Out[16]:
0     0
1     1
2    14
3     9
4    16
5    25
6    36
dtype: int64
施琦
2023-03-14

如何添加单品?这不是很有效,但符合你的要求:

x = p.Series()
N = 4
for i in xrange(N):
   x = x.set_value(i, i**2)

产生x:

0    0
1    1
2    4
3    9

显然,有更好的方法可以在一个镜头中生成这个系列。

对于您的第二个问题,请检查SO问题的答案和引用,并在pandas.DataFrame中添加一行。

 类似资料:
  • 如何将单个项目添加到序列化的panda系列中。我知道这不是记忆方面最有效的方法,但我仍然需要这样做。 一些事情: 另外,我怎么能添加一个单一的行到熊猫DataFrame?

  • 我想给我的 以下是我的代码: 当我运行这个,我得到以下错误: 我怎样才能解决这个问题?

  • 我的目标是从用户输入的“AM”-“PM”字符串格式打印包含24小时十进制格式的进入和退出时间的列表,如以下字符串数组:{6AM#8AM,11AM#1PM,7AM#8PM,7AM#8AM,10AM#12PM,12PM#4PM,1PM#4PM,8AM#9AM} 我在for循环中声明了各个列表,并在循环中为它们赋值,但从代码中得到了以下运行时异常:java。lang.IndexOutOfBoundsEx

  • 我正在与以下df合作: 我想强制所有年份的数字: 有没有一个简单的方法来做这件事,还是我必须把它们全部打印出来?

  • 我已经看到了将一个列/系列分解成熊猫数据框架的多个列这一主题的一些变体,但是我一直在尝试做一些事情,但是现有的方法并没有真正成功。 给定如下数据帧: 我想将系列中的项目转换为列,以 值作为值,如下所示: 我觉得这应该是一个相对简单的问题,但我已经为此努力了几个小时,不断增加的复杂程度,但没有成功。

  • 我的数据记录如下所示 我想在forloop中向我的数据表添加新行(不是循环现有的数据表) 但这种方法行不通。如何向现有数据目录添加新行?