python - pandas concat 生成 nan 值

标签 python pandas dataframe concatenation nan

我很好奇为什么在 pandas 中简单地串联两个数据框:

shape: (66441, 1)
dtypes: prediction    int64
dtype: object
isnull().sum(): prediction    0
dtype: int64

shape: (66441, 1)
CUSTOMER_ID    int64
dtype: object
isnull().sum() CUSTOMER_ID    0
dtype: int64

形状相同且都没有 NaN 值

foo = pd.concat([initId, ypred], join='outer', axis=1)
print(foo.shape)
print(foo.isnull().sum())

如果加入会产生很多 NaN 值。

(83384, 2)
CUSTOMER_ID    16943
prediction     16943

如何解决此问题并防止引入 NaN 值?

试着像复制它一样

aaa  = pd.DataFrame([0,1,0,1,0,0], columns=['prediction'])
print(aaa)
bbb  = pd.DataFrame([0,0,1,0,1,1], columns=['groundTruth'])
print(bbb)
pd.concat([aaa, bbb], axis=1)

失败,例如工作得很好,因为没有引入 NaN 值。

最佳答案

我认为不同的索引值有问题,所以 concat 无法对齐的地方得到 NaN:

aaa  = pd.DataFrame([0,1,0,1,0,0], columns=['prediction'], index=[4,5,8,7,10,12])
print(aaa)
    prediction
4            0
5            1
8            0
7            1
10           0
12           0

bbb  = pd.DataFrame([0,0,1,0,1,1], columns=['groundTruth'])
print(bbb)
   groundTruth
0            0
1            0
2            1
3            0
4            1
5            1

print (pd.concat([aaa, bbb], axis=1))
    prediction  groundTruth
0          NaN          0.0
1          NaN          0.0
2          NaN          1.0
3          NaN          0.0
4          0.0          1.0
5          1.0          1.0
7          1.0          NaN
8          0.0          NaN
10         0.0          NaN
12         0.0          NaN

解决方案是reset_index如果不需要索引值:

aaa.reset_index(drop=True, inplace=True)
bbb.reset_index(drop=True, inplace=True)

print(aaa)
   prediction
0           0
1           1
2           0
3           1
4           0
5           0

print(bbb)
   groundTruth
0            0
1            0
2            1
3            0
4            1
5            1

print (pd.concat([aaa, bbb], axis=1))
   prediction  groundTruth
0           0            0
1           1            0
2           0            1
3           1            0
4           0            1
5           0            1

编辑:如果需要像 aaa 一样的索引并且 DataFrames 的长度是相同的使用:

bbb.index = aaa.index
print (pd.concat([aaa, bbb], axis=1))
    prediction  groundTruth
4            0            0
5            1            0
8            0            1
7            1            0
10           0            1
12           0            1

关于python - pandas concat 生成 nan 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40339886/

相关文章:

python - 获取 pandas 中 groupby 的最大值和最小值之间的差异并计算平均值

python - 按日期顺序组织数据行 Pandas Python

python - Pandas 如何使用 .loc 根据其他列中的值将列设置为 NaN

Python选择空格后的一个字符

python - 在 Python Jupyter Notebook 中创建 BeakerX TableDisplay?

python - 将单列数据帧合并到另一个数据帧,而无需任何公共(public)键

python - 向量化 Pandas 中的函数

python - 何时在 Pandas 中使用 .count() 和 .value_counts()?

python - 强制 sklearn cross val 分数使用分层 k 折叠?

pandas - 使用 apply 方法将 Python Pandas 数据帧列中的元组列表转换为列表字典