Python 停止将int转换为float

Python 停止将int转换为float,python,pandas,type-conversion,type-inference,Python,Pandas,Type Conversion,Type Inference,我有一个数据帧。以下是两个相关列:一个是int列,另一个是str列 我知道如果我在int列中插入NaN,Pandas会将所有int转换为float,因为int没有NaN值 但是,当我在str列中插入None时,Pandas也会将我的int转换为float。这对我来说没有意义-为什么我在第2列中输入的值会影响第1列 下面是一个简单的工作示例(Python 2): 输出是 int str 0 0 zero int str 0 0.0 zero 1 1.0 Na

我有一个
数据帧
。以下是两个相关列:一个是
int
列,另一个是
str

我知道如果我在
int
列中插入
NaN
,Pandas会将所有
int
转换为
float
,因为
int
没有
NaN

但是,当我在
str
列中插入
None
时,Pandas也会将我的
int
转换为
float
。这对我来说没有意义-为什么我在第2列中输入的值会影响第1列

下面是一个简单的工作示例(Python 2):

输出是

   int   str
0    0  zero

   int   str
0  0.0  zero
1  1.0   NaN
有没有办法使输出符合以下要求:

   int   str
0    0  zero

   int   str
0    0  zero
1    1   NaN
无需将第一列重新编译为
int

  • 我更喜欢使用
    int
    而不是
    float
    ,因为实际数据 该列是整数。如果没有解决办法,我就 尽管如此,还是使用
    float

  • 我更喜欢不必重铸,因为在我的实际代码中,我不必重铸
    存储实际的
    dtype

  • 我还需要逐行插入数据


如果设置
dtype=object
,则序列将能够包含任意数据类型:

df["int"] = pd.Series([], dtype=object)
df["str"] = pd.Series([], dtype=str)
df.loc[0] = [0, "zero"]
print(df)
print()
df.loc[1] = [1, None]
print(df)

   int   str
0    0  zero
1  NaN   NaN

  int   str
0   0  zero
1   1  None

如果使用
DataFrame.append
添加数据,则数据类型将被保留,并且不必重新编码或依赖
对象

In [157]: df
Out[157]:
   int   str
0    0  zero

In [159]: df.append(pd.DataFrame([[1, None]], columns=['int', 'str']), ignore_index=True)
Out[159]:
   int   str
0    0  zero
1    1  None

从pandas 1.0.0开始,我相信您还有另一个选择,即首先使用。这将数据帧列转换为支持pd.NA的数据类型,从而避免了NaN/None的问题

...

df = df.convert_dtypes()
df.loc[1] = [1, None]
print(df)

#   int   str
# 0   0  zero
# 1   1  NaN

你无法想象这本书是如何帮助我的,在一个有200列的csv中阅读。。。事实上,我用一个精心制作的dict来测试数据类型,结果只是一次又一次地开始。谢谢。这不仅适用于任何列值
None
的情况,也适用于
float
的情况。不正确:
df=pd.DataFrame(列=[“a1”]);df.append(pd.DataFrame([[1200]],columns=['a1','a2']),ignore_index=True)
打印
01200.0
,其中200.0显然是一个浮点。当然,但是如果您指定
a2
在创建时具有dtype
float
(在OP中就是这种情况),
append
仍然按预期工作。
...

df = df.convert_dtypes()
df.loc[1] = [1, None]
print(df)

#   int   str
# 0   0  zero
# 1   1  NaN