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
在创建时具有dtypefloat
(在OP中就是这种情况),append
仍然按预期工作。
...
df = df.convert_dtypes()
df.loc[1] = [1, None]
print(df)
# int str
# 0 0 zero
# 1 1 NaN