我有一个数据集x和y。 x是一个适用于所有y数据的列表。我希望使用pd.concat([pd.Series(x),pd.DataFrame(y)], axis=1)
达到以下目标:
x1 y1 ya
x2 y2 yb
x3 y3 yc
x4 y4 yd
x5 y5 ye
x6 y6 yf
运行pd.concat([pd.Series(x),pd.DataFrame(y)], axis=1)
或pd.concat([pd.DataFrame(x),pd.DataFrame(y)], axis=1)
会导致以下结果
x1 Nan Nan
x2 Nan Nan
x3 y1 ya
x4 y2 yb
x5 y3 yc
x6 y4 yd
y5 ye
y6 yf
因此,代码y值向两个单元格移动到axis=0
方向。我在此DataFrame中有索引。我已经删除了索引。没有观察到差异。
仅当我将x和y连接在一起时,才观察到此偏移。
如何将y值向上移动两个?
谢谢!
答案 0 :(得分:1)
当2系列的索引未对齐时,会发生这种情况。重置索引(reset_index(drop=True)
之后再试一次,以便系列或数据框的索引都对齐:
pd.concat([pd.Series(x).reset_index(drop=True),pd.DataFrame(y)
.reset_index(drop=True)], axis=1)
或者:
pd.concat([pd.DataFrame(x).reset_index(drop=True),pd.DataFrame(y)
.reset_index(drop=True)],axis=1)
添加示例:
s1=pd.Series([1,2,3]) #normal indexed
s2=pd.Series([4,5,6],index=[2,3,4]) #index starts from 2
在axis=1
上正常连接
pd.concat([s1,s2],axis=1)
0 1
0 1.0 NaN
1 2.0 NaN
2 3.0 4.0
3 NaN 5.0
4 NaN 6.0
与reset_index()
pd.concat([s1.reset_index(drop=True),s2.reset_index(drop=True)],axis=1)
0 1
0 1 4
1 2 5
2 3 6