pandas切片上的运算和赋值比较

匿名 (未验证) 提交于 2019-12-03 00:39:02

x =pd.Series(np.arange(0,10))

y =pd.Series(np.arange(100,110))

df =pd.DataFrame({'x':x, 'y':y})

df

运算

变量[]

变量.loc[]

!!! 包含末尾 !!!

df.loc[]

!!! 包含末尾 !!!

df[]

取整列

df.x

df.loc[:,'x']

df['x']

取整行

df.loc[2:5]

df[2:5]

同一个[],既可以取列,也可以取行!!!

ȡֵ

df.x[2:5]

df.x.loc[2:5]

df.loc[2:5, 'x']

同左

df[2:5, 'x']

TypeError: unhashable type: 'slice'

加法

(index一致)

df.x[2:5] + df.y[2:5]

df.x.loc[2:5] + df.y.loc[2:5]

df.loc[2:5, 'x'] + df.loc[2:5, 'y']

同左

纵向

concat

pd.concat([df.x[2:5], df.y[3:6]])

pd.concat([df.x.loc[2:5], df.y.loc[3:6]])

5

pd.concat([df.loc[2:5, 'x'], df.loc[3:6, 'y']])

同左

横向

concat

pd.concat([df.x[2:5], df.y[3:6]], axis=1)

NaN
105.0

pd.concat([df.x.loc[2:5], df.y.loc[3:6]], axis=1)

NaN

5.0

106.0

pd.concat([df.loc[2:5, 'x'], df.loc[3:6, 'y']], axis=1)

同左

加法

(index不一致)

df.x[2:5] + df.y[3:6]

df.x.loc[2:5] + df.y.loc[3:6]

NaN

NaN

df.loc[2:5, 'x'] + df.loc[3:6, 'y']

同左

加法

(index不一致,

取values)

df.x[2:5].values + df.y[3:6].values

array([105, 107, 109])

df.x.loc[2:5].values + df.y.loc[3:6].values

array([105, 107, 109, 111])

df.loc[2:5, 'x'].values + df.loc[3:6, 'y'].values

同左

加法

(reset index)

df.x[2:5].reset_index(drop=True) + df.y[3:6].reset_index(drop=True)

df.x.loc[2:5].reset_index(drop=True) + df.y.loc[3:6].reset_index(drop=True)

111

df.loc[2:5, 'x'].reset_index(drop=True) + df.loc[3:6, 'y'].reset_index(drop=True)

同左

赋值

(index不一致)

df1 = df.copy()

df1.x[2:5] = df1.y[3:6]

df1

!!!不会对应索引!!!

df1 = df.copy()

df1.x.loc[2:5] = df1.y.loc[3:6]

df1

102

df1 = df.copy()

df1.loc[2:5,'x'] = df1.loc[3:6,'y']

df1

同左

赋值

(index不一致,

取values)

df1 = df.copy()

df1.x[2:5] = df1.y[3:6].values

df1

df1 = df.copy()

df1.x.loc[2:5] = df1.y.loc[3:6].values

df1

106

df1 = df.copy()

df1.loc[2:5,'x'] = df1.loc[3:6,'y'].values

df1

同左

赋值

(index不一致,

reset index)

df1 = df.copy()

df1.x[2:5] = df1.y[3:6].reset_index(drop=True)

df1

df1 = df.copy()

df1.x.loc[2:5] = df1.y.loc[3:6].reset_index(drop=True)

df1

105.0

106.0

NaN

NaN

!!!对应到0开头的索引!!!

df1 = df.copy()

df1.loc[2:5,'x'] = df1.loc[3:6,'y'].reset_index(drop=True)

df1

同左

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!