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

如何将单个项目添加到熊猫系列

林丁雷
2023-03-14

如何将单个项目添加到序列化的panda系列中。我知道这不是记忆方面最有效的方法,但我仍然需要这样做。

一些事情:

>> 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

另外,我怎么能添加一个单一的行到熊猫DataFrame?

共有3个答案

丁昌翰
2023-03-14

如果你有一个索引和值。然后,您可以添加到系列为:

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

obj['e'] = 181

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

穆单鹗
2023-03-14

TLDR:不要一个接一个地将项目追加到一个系列中,最好用有序的集合进行扩展

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

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

顺便说一下,你不能按位置追加一个新项目(你会得到一个索引错误),索引中的标签不必是唯一的,也就是说,当你用标签赋值时,你用标签,并且在这种情况下不附加新行。这可能会导致微妙的错误。

这个故事的寓意是,你不应该一个接一个地追加数据,你最好用一个有序的集合进行扩展。问题是你不能在适当的地方扩展一个系列。这就是为什么更好地组织代码,这样就不需要通过引用来更新系列的特定实例。

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

以下是一些代码示例:

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 实例添加单个项目? 我正在寻找以下代码: 同样,我如何向Pandas 添加一行呢?

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

  • 问题内容: 所以,我想要的是选择一个项目时要运行的另一段代码。但是我的问题是,如何对特定项目实施? 这是我的代码: 我该怎么做才能添加到“车辆”,“自行车/自行车”,“船”,“房屋”,“企业”,“对象”,“工作”,“等级”和“许可证”项中? 问题答案: 如果您希望在选择更改时发生某些事情,则不希望使用MouseListener,而希望使用。它不仅是正确的抽象,而且请记住,不使用鼠标就可以更改选择。

  • 问题内容: Eclipse Helios 3.6 Windows XP SP3 我已经使用Eclipse通过以下方式下载了guava SDK: 1)在Eclipse中,转到 帮助 >安装新软件… 2)在“ 使用: ”文本框中,我使用了以下URL http://svn.codespot.com/a/eclipselabs.org/guava- bundle/trunk/repository/ 3)它

  • 问题内容: 如何将库项目(例如Sherlock ABS)添加到Android Studio? (不是旧的基于ADT Eclipse的捆绑包,而是新的Android Studio。) 问题答案: Android Studio 1.0更新 自从发布Android Studio 1.0(以及许多版本在v1.0到我上次回答之时的第一个版本)以来,某些事情已经发生了变化。 我的描述着重于通过Gradle文件

  • 问题内容: 我需要完成以下任务: 从: (向每行添加一个元素)到: 我已经尝试做类似a [n] = array([1,3,4,x])的事情 但是numpy抱怨形状不匹配。我尝试遍历并将元素x附加到每个项目,但是更改未反映出来。 关于如何实现此目标的任何想法? 问题答案: 对于有python经验的人来说,将数据追加到现有数组是很自然的事情。但是,如果您发现自己定期附加到大型数组,则会很快发现NumP