当前位置: 首页 > 面试题库 >

向pandas DataFrame添加行会更改dtype

史英飙
2023-03-14
问题内容

我的问题是,将一行添加到DataFrame会更改列的dtype:

>>> from pandas import DataFrame
>>> df = DataFrame({'a' : range(10)}, dtype='i4')
>>> df
   a
0  0
1  1
2  2
3  3
4  4
5  5
6  6
7  7
8  8
9  9

[10 rows x 1 columns]

我将dtype特别指定为int32(即’i4’),可以看出:

>>> df.dtypes
a    int32
dtype: object

但是,添加一行会将dtype更改为float64:

>>> df.loc[10] = 99

>>> df
     a
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
10  99

[11 rows x 1 columns]

>>> df.dtypes
a    float64
dtype: object

我尝试指定添加的值的dtype:

>>> import numpy as np
>>> df = DataFrame({'a' : np.arange(10, dtype=np.int32)})

>>> df.dtypes
a    int32
dtype: object

>>> df.loc[10] = np.int32(0)

>>> df.dtypes
a    float64
dtype: object

但这也不起作用。有没有不使用返回新对象的函数的解决方案?


问题答案:

放大分为两个阶段,nan首先将a放在该列中,然后将其分配,这就是为什么要强制它的原因。我将其放在错误/增强列表中。它有点不平凡。

这是一种解决方法,可以使用append。

In [14]: df.append(Series(99,[10],dtype='i4').to_frame('a'))
Out[14]: 
     a
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
10  99

[11 rows x 1 columns]

In [15]: df.append(Series(99,[10],dtype='i4').to_frame('a')).dtypes
Out[15]: 
a    int32
dtype: object

bug /增强功能可以自动执行此操作的问题:https :
//github.com/pydata/pandas/issues/6485



 类似资料:
  • 问题内容: 考虑以下查询。 两个查询的执行计划相同,并且同时执行。但是,我期望第二个查询将有不同的计划,并且执行速度会变慢,因为它必须从联系人中选择所有数据并应用过滤器。看来我错了。 我想知道这是怎么回事? 数据库服务器:SQL Server 2005 问题答案: 正在发生“查询优化器”。当您运行查询时,SQL Server使用基于成本的优化器来确定最有可能满足该请求(即执行计划)的最佳方法。将其

  • 问题内容: 我们有一个简单的项目,我们从套接字读取数据,并希望用即将到来的数据填充表,但是我们找不到找到将行添加到尚未创建的对象的方法,只能在以下位置找到添加行的方法:表的创建时间。 是否可以向中动态添加行,或者有更好的替代对象来处理这种显示数据的方式? 编辑 :非常感谢您的回答。 他们三个看起来都很有前途,但是我只选择一个,我认为最好的就是纪尧姆的。 问题答案: 您应该创建一个自定义。A 实际上

  • 如果你看看hashMap里面java的hashCode方法,你会发现: 因此,当您将内容插入哈希映射时,哈希映射的哈希代码将更改。因此,如果我们在哈希集中插入一个空的哈希映射,然后向此哈希映射插入一些内容,然后调用 它将返回 。为什么 Java 允许这样的行为?这很容易导致哈希集中出现重复的项目。 请尝试运行以下代码:

  • 基本上,这个想法是在不使用Qgis的情况下自动化一些工作流。 我无法获得与Geopandas中Qgis功能“向点添加坐标”类似的结果,该功能允许您在当前投影中获取点的x、y坐标,并为表创建新属性。 所以我有一套我玩过的积分。原始形状文件的CRS为epsg 2154(Lambert 93)。我需要以与谷歌地图兼容的格式获取纬度和经度。 谷歌使用epsg 3857谷歌地图。 这个想法是切换到epsg

  • 问题内容: 我的PyQT QTextEdit遇到一个相当奇怪的问题。 当我从QLineEdit输入一个字符串时,它会添加它,但是说我输入另一个,第一个字符串就会消失,我认为那是因为我没有追加文本。 知道我该怎么做吗? 以下是相关代码: 和重要的 编辑 我发现我需要使用 问题答案: 该方法将替换所有当前文本,因此您只需要使用该方法即可。(请注意,这两种方法都会自动添加尾随换行符)。