目录
(1)打印某列的唯一值
真是能偷懒,hhhh
正经写法:
print(train['label'].unique())
(2)唯一值出现的次数
(3)按列的值选择行数
tr = dataset.loc[dataset['day']!=30]
te =dataset.loc[dataset['day']==30]
te =te.loc[te['future_slice_id']<=30]
(4)dataframe类型的要编成ndarray类型
dataframe不能按照行进行索引,但是在进行k折交叉验证时,行索引变得十分重要,所以dataframe类型的要编成ndarray类型。
import numpy as np
#法1:DataFrame对象作为参数创建ndarray对象
np.array(df)
#法2:指定列转换为ndarray类型
df.as_matrix(['future_slice_id', 'current_slice_id'])
#法3:等同与无参数的as_matrix();法1、法3效果一样,都是整个数据框变成array类型
df.values
link:numpy中的ndarray与pandas的Series和DataFrame之间的相互转换_Bob Liu的程序人生-CSDN博客
(5)表的连接
link:pd.concat()和pd.merge()_万里里的博客-CSDN博客
import pandas as pd
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],'B': ['B0', 'B1', 'B2', 'B3'],'C': ['C0', 'C1', 'C2', 'C3'],'D': ['D0', 'D1', 'D2', 'D3'],'E': ['E0', 'E1', 'E2', 'E3']},index=[1,2,3,4])
print(df1)
'''
A B C D E
1 A0 B0 C0 D0 E0
2 A1 B1 C1 D1 E1
3 A2 B2 C2 D2 E2
4 A3 B3 C3 D3 E3
'''
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],'B': ['B4', 'B5', 'B6', 'B7'],'C': ['C4', 'C5', 'C6', 'C7'],'D': ['D4', 'D5', 'D6', 'D7']},index=[4, 5, 6, 7])
print(df2)
'''
A B C D
4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
'''
data = pd.concat([df1,df2]) #默认上下直接拼接
print("竖索引的并:\n",data)
'''
A B C D E
1 A0 B0 C0 D0 E0
2 A1 B1 C1 D1 E1
3 A2 B2 C2 D2 E2
4 A3 B3 C3 D3 E3
4 A4 B4 C4 D4 NaN
5 A5 B5 C5 D5 NaN
6 A6 B6 C6 D6 NaN
7 A7 B7 C7 D7 NaN
'''
data = pd.concat([df1,df2],join='inner') #默认上下直接拼接
print("竖索引的交:\n",data)
'''
A B C D
1 A0 B0 C0 D0
2 A1 B1 C1 D1
3 A2 B2 C2 D2
4 A3 B3 C3 D3
4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
'''
data = pd.concat([df1,df2],join='outer') #默认上下直接拼接
print("竖索引的并:\n",data)
'''
A B C D E
1 A0 B0 C0 D0 E0
2 A1 B1 C1 D1 E1
3 A2 B2 C2 D2 E2
4 A3 B3 C3 D3 E3
4 A4 B4 C4 D4 NaN
5 A5 B5 C5 D5 NaN
6 A6 B6 C6 D6 NaN
7 A7 B7 C7 D7 NaN
'''
data = pd.concat([df1,df2],axis=1) #左右 1隔开俩 一边一个
print("横索引的并:\n",data)
'''
A B C D E A B C D
1 A0 B0 C0 D0 E0 NaN NaN NaN NaN
2 A1 B1 C1 D1 E1 NaN NaN NaN NaN
3 A2 B2 C2 D2 E2 NaN NaN NaN NaN
4 A3 B3 C3 D3 E3 A4 B4 C4 D4
5 NaN NaN NaN NaN NaN A5 B5 C5 D5
6 NaN NaN NaN NaN NaN A6 B6 C6 D6
7 NaN NaN NaN NaN NaN A7 B7 C7 D7
'''
data = pd.concat([df1,df2],join='inner',axis=1)
print("横索引的交:\n",data)
'''
A B C D E A B C D
4 A3 B3 C3 D3 E3 A4 B4 C4 D4
'''
data = pd.concat([df1,df2],join='outer',axis=1)
print("横索引的并:\n",data)
'''
A B C D E A B C D
1 A0 B0 C0 D0 E0 NaN NaN NaN NaN
2 A1 B1 C1 D1 E1 NaN NaN NaN NaN
3 A2 B2 C2 D2 E2 NaN NaN NaN NaN
4 A3 B3 C3 D3 E3 A4 B4 C4 D4
5 NaN NaN NaN NaN NaN A5 B5 C5 D5
6 NaN NaN NaN NaN NaN A6 B6 C6 D6
7 NaN NaN NaN NaN NaN A7 B7 C7 D7
'''
# ==========merge===============================================
data = pd.merge(df1,df2,how='inner')
print('相交列的交:\n',data)
'''
Empty DataFrame
Columns: [A, B, C, D, E]
Index: []
'''
# 分析结果:df1 df2相交的列为ABCD,但是它们两个ABCD列的值,都不相等,所以相交列的交为空
df2 = pd.DataFrame({'A': ['A1', 'A5', 'A6', 'A7'],'B': ['B1', 'B0', 'B6', 'B7'],'C': ['C4', 'C5', 'C6', 'C7'],'D': ['D4', 'D5', 'D6', 'D7']},index=[4, 5, 6, 7])
'''
df1:
A B C D E
1 A0 B0 C0 D0 E0
2 A1 B1 C1 D1 E1
3 A2 B2 C2 D2 E2
4 A3 B3 C3 D3 E3
df2:
A B C D
4 A1 B1 C4 D4
5 A5 B0 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
'''
data = pd.merge(df1,df2,how='inner',on='A')
print("A列的交:\n",data)
'''
A B_x C_x D_x E B_y C_y D_y
0 A1 B1 C1 D1 E1 B1 C4 D4
'''
data = pd.merge(df1,df2,how='outer')
print("相交列的并:\n",data)
'''
A B C D E
0 A0 B0 C0 D0 E0
1 A1 B1 C1 D1 E1
2 A2 B2 C2 D2 E2
3 A3 B3 C3 D3 E3
4 A4 B4 C4 D4 NaN
5 A5 B5 C5 D5 NaN
6 A6 B6 C6 D6 NaN
7 A7 B7 C7 D7 NaN
'''
data = pd.merge(df1,df2,how='outer',on='A')
print("A列的并:\n",data)
'''
A B_x C_x D_x E B_y C_y D_y
0 A0 B0 C0 D0 E0 NaN NaN NaN
1 A1 B1 C1 D1 E1 B1 C4 D4
2 A2 B2 C2 D2 E2 NaN NaN NaN
3 A3 B3 C3 D3 E3 NaN NaN NaN
4 A5 NaN NaN NaN NaN B0 C5 D5
5 A6 NaN NaN NaN NaN B6 C6 D6
6 A7 NaN NaN NaN NaN B7 C7 D7
'''
pd.contact()分上下连接和左右连接。同时还有取交集还是并集之分。比较的横或者纵索引的交并。
读成:横索引的并、横索引的交、纵索引的并、纵索引的交;
横纵索引的比较用axis指定
并还是交用outer和inner指定
pd.merge()也有交还是并,与contact最大的不同,在于日常使用merge()时会指定列名,未指定的话就默认比较,相交的列名。
在列名上找交或者并,没有指定列名。
读成:某某列的交,某某列的并