附加pandas数据帧自动转换为float但想要int

时间:2016-11-09 17:48:23

标签: python pandas dataframe bitstring

如何让pandas附加一个整数并保留整数数据类型?在我输入数据之后我意识到我可以将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 个答案:

答案 0 :(得分:5)

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

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

enter image description here

我完成了

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

enter image description here

答案 1 :(得分:0)

正如本期内容一样:df.append should retain columns type if same type #18359append方法将保留自熊猫0.23.0起的列类型。

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

答案 2 :(得分:0)

我发现有两种解决方法。

  1. 升级到熊猫版>= 0.23.0

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

df = df.astype(int)

答案 3 :(得分:0)

如果您使用的是 Pandas 1.0.0 及更高版本,则需要使用 convert_dtypes。请参阅链接了解说明和使用 convert_dtypes

df = df.convert_dtypes()
df = df.append({'test':test, 'another':5}, ignore_index=True)