Pandas Dataframe和Series join返回空的Dataframe或NaN列

时间:2017-03-17 06:31:20

标签: python pandas dataframe merge series

我遇到的问题是,当我尝试加入Dataframe和Series时,由于某种原因,生成的Dataframe为空或者有一列NaN值。我想弄清楚为什么会这样。

该系列看起来像这样:

index
110     0.135135
111     0.000000
1110    0.000000

Dataframe看起来像这样:

           mean         std
index                        
1101     -41.000000   46.305225
1102     -58.724998  126.810371
1110      -6.375000   12.915982

如果我没有说明'怎么样,我就明白了:

          mean        std             series_col
index                                 
1101     -41.000000   46.305225       NaN
1102     -58.724998   126.810371      NaN
1110      -6.375000   12.915982       NaN

这就是我尝试使用以下方式加入两者的方法:

merged = df1.join(series1, how='inner')

我得到了这个输出:

Empty DataFrame
Columns: [mean, std, series_col]
Index: []

我无法弄清楚出了什么问题。我认为它必须是一个索引问题,但我确信Dataframe和Series都有一些与数据匹配的交叉索引。

如果我能提供任何其他有用的信息,请告诉我。

2 个答案:

答案 0 :(得分:3)

当我这样做时,我得到了

df1.join(series1)

           mean         std    1
1101 -41.000000   46.305225  NaN
1102 -58.724998  126.810371  NaN
1110  -6.375000   12.915982  0.0

我猜你的一个索引是字符串而另一个是整数

答案 1 :(得分:2)

问题索引不同dtypes,因此请NaN

解决方案将两个索引都转换为int或两者转换为str以进行对齐:

series1.index = series1.index.astype(int)
df1.index = df1.index.astype(int)
series1.index = series1.index.astype(str)
df1.index = df1.index.astype(str)

对我而言,它回归:

#inner join
merged = df1.join(series1, how='inner')
print (merged)
        mean        std  val
index                       
1110  -6.375  12.915982  0.0
#default left join
merged = df1.join(series1)
#same as:  
merged = df1.join(series1, how='left')
print (merged)
            mean         std  val
index                            
1101  -41.000000   46.305225  NaN
1102  -58.724998  126.810371  NaN
1110   -6.375000   12.915982  0.0
merged = df1.join(series1, how='outer')
print (merged)
            mean         std       val
index                                 
110          NaN         NaN  0.135135
1101  -41.000000   46.305225       NaN
1102  -58.724998  126.810371       NaN
111          NaN         NaN  0.000000
1110   -6.375000   12.915982  0.000000
merged = df1.join(series1, how='right')
print (merged)
        mean        std       val
index                            
110      NaN        NaN  0.135135
111      NaN        NaN  0.000000
1110  -6.375  12.915982  0.000000