我有一个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 次 |
| 最近记录: |