在数据加载完毕之后,就需要进行数据分析的下一步--即数据处理。而数据处理分为三个步骤:数据准备、数据分组、数据转换。
一:数据准备
数据准备就是在加载的多个不同的数据结构(如Series、DataFrame)之上,把数据转换为统一的数据结构。--分为多个步骤:组装(合并、拼接、组合)、变型(轴向旋转)、删除。
合并:
使用一个或多个键,将多行数据连接在一起。执行合并操作的函数为merge()。
import numpy as np
import pandas as pd
frame=pd.DataFrame({'a':[1,2,3,4],'b':[2,3,4,5],'c':[6,7,8,9]})
frame1=pd.DataFrame({'a':[2,4,7,9],'b':[2,0,2,33],'f':[1,1,4,5]})
#合并(内连接)
so=pd.merge(frame,frame1,on='a')
print(so)
#外连接
so1=pd.merge(frame,frame1,on='a',how='outer')
print(so1)
a b_x c b_y f
0 2 3 7 2 1
1 4 5 9 0 1
a b_x c b_y f
0 1 2.0 6.0 NaN NaN
1 2 3.0 7.0 2.0 1.0
2 3 4.0 8.0 NaN NaN
3 4 5.0 9.0 0.0 1.0
4 7 NaN NaN 2.0 4.0
5 9 NaN NaN 33.0 5.0
import numpy as np
import pandas as pd
frame=pd.DataFrame({'a':[1,2,3,4],'b':[2,3,4,5],'c':[6,7,8,9]})
frame1=pd.DataFrame({'a':[2,4,7,9],'b':[2,0,2,33],'f':[1,1,4,5]})
#合并(左连接)
so=pd.merge(frame,frame1,on='a',how='left')
print(so)
#右连接
so1=pd.merge(frame,frame1,on='a',how='right')
print(so1)
a b_x c b_y f
0 1 2 6 NaN NaN
1 2 3 7 2.0 1.0
2 3 4 8 NaN NaN
3 4 5 9 0.0 1.0
a b_x c b_y f
0 2 3.0 7.0 2 1
1 4 5.0 9.0 0 1
2 7 NaN NaN 2 4
3 9 NaN NaN 33 5
import numpy as np
import pandas as pd
frame=pd.DataFrame({'a':[1,2,3,4],'b':[2,3,4,5],'c':[6,7,8,9]})
frame1=pd.DataFrame({'a':[2,4,7,9],'b':[2,0,2,33],'f':[1,1,4,5]})
#合并(多个键作为合并的标准)
so=pd.merge(frame,frame1,on=['a','b'],how='outer')
print(so)
a b c f
0 1 2 6.0 NaN
1 2 3 7.0 NaN
2 3 4 8.0 NaN
3 4 5 9.0 NaN
4 2 2 NaN 1.0
5 4 0 NaN 1.0
6 7 2 NaN 4.0
7 9 33 NaN 5.0
import numpy as np
import pandas as pd
frame=pd.DataFrame({'a':[1,2,3,4],'b':[2,3,4,5],'c':[6,7,8,9]})
frame1=pd.DataFrame({'a1':[2,4,7,9],'b1':[2,0,2,33],'f':[1,1,4,5]})
#合并(按照索引合并)--不是以列进行合并
so=frame.join(frame1)
print(so)
a b c a1 b1 f
0 1 2 6 2 2 1
1 2 3 7 4 0 1
2 3 4 8 7 2 4
3 4 5 9 9 33 5
拼接:
将数据结构按照x轴或y轴进行拼接。拼接所用的函数为concat()。
import numpy as np
import pandas as pd
frame=pd.DataFrame({'a':[1,2,3,4],'b':[2,3,4,5],'c':[6,7,8,9]})
frame1=pd.DataFrame({'a1':[2,4,7,9],'b1':[2,0,2,33],'f':[1,1,4,5]})
se1=pd.Series(np.random.rand(4),index=[1,2,3,4])
se2=pd.Series(np.random.rand(4),index=[5,6,7,8])
#连接两个Series对象(返回一个Series对象)
so=pd.concat([se1,se2],axis=0)
print(so)
#连接两个Series对象(返回一个DataFrame对象)
so1=pd.concat([se1,se2],axis=1)
print(so1)
1 0.760366
2 0.946837
3 0.762230
4 0.817649
5 0.550010
6 0.370044
7 0.348296
8 0.862112
dtype: float64
0 1
1 0.760366 NaN
2 0.946837 NaN
3 0.762230 NaN
4 0.817649 NaN
5 NaN 0.550010
6 NaN 0.370044
7 NaN 0.348296
8 NaN 0.862112
import numpy as np
import pandas as pd
frame=pd.DataFrame({'a':[1,2,3,4],'b':[2,3,4,5],'c':[6,7,8,9]})
frame1=pd.DataFrame({'a1':[2,4,7,9],'b1':[2,0,2,33],'f&