python - 替换 pandas 数据框行会覆盖所有列的 dtypes

标签 python pandas

当我替换 df 的一行时,它会导致 dtype=int 的现有列变为 float 。我想将其保留为 int。

我创建 df:

testdate = pd.datetime(2014, 1, 1)
adddata = {'intcol':0,'floatcol':0.0}
df = pd.DataFrame(data=adddata, index=pd.date_range(testdate, periods=1))

根据需要,一列是 int,另一列是 float,正如 df.dtypes 所确认的:

floatcol    float64
intcol        int64
dtype: object

然后,我使用 df.ix[testdate] = pd.Series(adddata) 覆盖现有行(在本例中只有 1 行)。我故意使用相同的数据来显示问题:intcol 已变为 float 。 df.dtypes:

floatcol    float64
intcol      float64
dtype: object

请注意,我可以单独更改单元格(例如 df.ix[testdate,'floatcol'] = 0.0)并且保留列 dtypes,但实际上我有远远超过 2 列我想同时覆盖,所以一次只覆盖一个很麻烦。

最佳答案

有趣的是,即使将数据类型指定为 object 也没有帮助:

>>> df.loc[testdate,:] = pd.Series(adddata, dtype='object')
>>> df.dtypes
floatcol    float64
intcol      float64
dtype: object

有人可能有更好的解决方案,但我注意到这有效:

>>> df.loc[testdate,:] = pd.Series(list(adddata.values()), adddata.keys(), dtype='object')
>>> df.dtypes
floatcol    float64
intcol        int64
dtype: object

但是,如果行值采用 dict 格式,可能会更容易:

>>> df.loc[testdate,:] = list(map(adddata.get, df.columns))
>>> df.dtypes
floatcol    float64
intcol        int64
dtype: object

关于python - 替换 pandas 数据框行会覆盖所有列的 dtypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22575617/

相关文章:

python - 在 Pandas 的单元格中添加值

python - Scrapy 不进入解析方法

python - 无法关闭 Mac 上的 wxPython 窗口

python - 从 python 中的另一个文件导入类 - 我知道修复方法,但为什么原始文件不起作用?

python - 如何保证venv的状态与requirements.txt中声明的一致?

python - cython 中的关键部分

python - 查询数据框的最快方法

python - 为经常出现的项目寻找支持

python - 如何旋转数据框

python - 从 str 中提取字符并使用 Pandas 重新格式化数据帧