Pandas Dataframe 和 Series 加入 returns 空 Dataframe 或 NaN 列
Pandas Dataframe and Series join returns empty Dataframe or NaN column
我遇到的问题是,当我尝试连接一个 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
当我没有指定 'how' 时,我得到这个:
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 都有一些相交的索引来匹配数据。
如果我可以提供任何其他有用的信息,请告诉我。
有问题索引不一样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)
对我来说 return:
#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
当我这样做时,我得到了
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
我猜你的一个索引是字符串,另一个是整数
我遇到的问题是,当我尝试连接一个 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
当我没有指定 'how' 时,我得到这个:
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 都有一些相交的索引来匹配数据。
如果我可以提供任何其他有用的信息,请告诉我。
有问题索引不一样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)
对我来说 return:
#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
当我这样做时,我得到了
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
我猜你的一个索引是字符串,另一个是整数