9

如何让熊猫附加一个整数并保留整数数据类型?我意识到在我输入数据后我可以 df.test.astype(int) 到整个列,但如果我能在我附加数据的时候做到这一点,那似乎是一个更好的方法。这是一个示例:

from bitstring import BitArray
import pandas as pd
df = pd.DataFrame()

test = BitArray('0x01')
test = int(test.hex)
print(test)
df = df.append({'test':test, 'another':5}, ignore_index=True)

print(df.test)
print(df.another)

这是输出:

1
0    1.0
Name: test, dtype: float64
0    5.0
Name: another, dtype: float64

它将整数更改为浮点数。

4

4 回答 4

8

这是因为您的初始数据框是空的。用一些整数列初始化它。

df = pd.DataFrame(dict(A=[], test=[], another=[]), dtype=int)
df.append(dict(A=3, test=4, another=5), ignore_index=True)

在此处输入图像描述


如果我做了

df = pd.DataFrame()
df.append(dict(A=3, test=4, another=5), ignore_index=True)

在此处输入图像描述

于 2016-11-09T18:01:48.890 回答
1

如果您使用的是 Pandas 1.0.0 及更高版本,则需要使用 convert_dtypes。请参阅链接以获取描述并使用convert_dtypes

df = df.convert_dtypes()
df = df.append({'test':test, 'another':5}, ignore_index=True)
于 2021-04-22T21:28:57.777 回答
0

在这个问题中:df.append 应该保留列类型如果相同类型 #18359append方法将保留自熊猫 0.23.0 以来的列类型。

因此将 pandas 版本升级到 0.23.0 或更高版本可以解决此问题。

于 2018-07-31T02:42:23.880 回答
0

好吧,我发现有两种解决方法。

  1. 升级到熊猫版>= 0.23.0

  2. 但是,如果不能像在生产代码中那样更改 pandas 版本,并且版本更改可能会影响prod环境中的其他脚本/代码。因此,单线以下是一种快速的解决方法。

df = df.astype(int)

于 2019-06-26T07:21:01.940 回答