我有一个DataFrame
.两个相关列如下:一列是列,int
另一列是列str
.
我明白,如果我插入NaN
到int
列,熊猫将全部转化int
成float
因为没有NaN
一个值int
.
然而,当我插入None
到str
列,熊猫都转换我int
来float
为好.这对我来说没有意义 - 为什么第2列中的值会影响第1列?
这是一个简单的工作示例(Python 2):
import pandas as pd
df = pd.DataFrame()
df["int"] = pd.Series([], dtype=int)
df["str"] = pd.Series([], dtype=str)
df.loc[0] = [0, "zero"]
print df
print
df.loc[1] = [1, None]
print df
Run Code Online (Sandbox Code Playgroud)
输出是
int str
0 0 zero
int str
0 0.0 zero
1 1.0 NaN
Run Code Online (Sandbox Code Playgroud)
有没有办法使输出如下:
int str
0 0 zero
int str
0 0 zero
1 1 NaN
Run Code Online (Sandbox Code Playgroud)
没有重铸第一列int
.
我更喜欢使用int
而不是float
因为该列中的实际数据是整数.如果没有解决方法,我会float
尽管使用.
我不想重铸,因为在我的实际代码中,我不
存储实际的dtype
.
我还需要逐行插入数据.
max*_*moo 25
如果设置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
Run Code Online (Sandbox Code Playgroud)
从 pandas 1.0.0 开始,我相信您还有另一种选择,即首先使用convert_dtypes。这会将数据帧列转换为支持 pd.NA 的数据类型,从而避免 NaN/None 的问题。
...
df = df.convert_dtypes()
df.loc[1] = [1, None]
print(df)
# int str
# 0 0 zero
# 1 1 NaN
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15902 次 |
最近记录: |