python 資料處理 pandas+numpy 等使用技巧
阿新 • • 發佈:2021-01-11
python 資料處理
python 資料處理 pandas使用技巧 最近在處理一些資料,發現以前所使用的一些方法可能比較笨拙,python 之中有一些比較方便的資料處理函式和技巧,所以寫下此篇部落格記錄一下
1、資料轉換:Dict TO List, TO Dataframe
dict_a= dict()
for i in range(11):
dict_a['blk_%d'%i]=10-i
print(dict_a)
建立如下字典:
>>>
{'blk_0': 10, 'blk_1': 9, 'blk_2': 8, 'blk_3': 7, 'blk_4': 6, 'blk_5': 5, 'blk_6': 4, 'blk_7': 3, 'blk_8': 2, 'blk_9': 1, 'blk_10': 0}
字典轉列表:
list_b=list(dict_a.items())
print (list_b)
>>>
[('blk_0', 10), ('blk_1', 9), ('blk_2', 8), ('blk_3', 7), ('blk_4', 6), ('blk_5', 5), ('blk_6', 4), ('blk_7', 3), ('blk_8', 2), ('blk_9', 1), ('blk_10', 0)]
列表轉DataFrame:
pd_c=pd.DataFrame(list_b,columns=["id","conent"])
print(pd_c)
>>>
id conent
0 blk_0 10
1 blk_1 9
2 blk_2 8
3 blk_3 7
4 blk_4 6
5 blk_5 5
6 blk_6 4
7 blk_7 3
8 blk_8 2
9 blk_9 1
10 blk_10 0
2、資料匹配
需求:有兩組資料,均為CSV列表檔案,將對應使用者的label新增新列到資料中。
一組資料為以使用者名稱“BlockId”為主的行資料,代表每一個使用者的資料。
另一組資料為標籤資料,主要有兩列,“BlockId”和“label”。
# 讀入兩組資料
data_df = pd.DataFrame(data_file, engine='c', na_filter=False, memory_map=True)
label_data = pd.read_csv(label_file, engine='c', na_filter=False, memory_map=True)
# 將帶標籤資料進行轉換
label_data = label_data.set_index('BlockId') # 設定“BlockId”為索引
label_dict = label_data['Label'].to_dict() # 轉換為{BlockId:Label}的字典
#使用apply新增每行資料
data_df['Label'] = data_df['BlockId'].apply(lambda x: 1 if label_dict[x] == 'Anomaly' else 0)
3、fillna()函式的使用
對缺失資料進行填充
data
>>>
0 1 2 3
a NaN NaN NaN 6
b NaN NaN NaN 10
c 11.0 12.0 13.0 14
d 15.0 16.0 17.0 18
print(data.fillna(0)) ### 用0填充缺失資料
>>>
0 1 2 3
a 0.0 0.0 0.0 6
b 0.0 0.0 0.0 10
c 11.0 12.0 13.0 14
d 15.0 16.0 17.0 18
4、tile()函式的使用
將資料擴充套件重複
#定義陣列
X=np.array([[3,1,2],[1,2,1]])
print(X)
>>>
[[3 1 2]
[1 2 1]]
a=np.tile(X,(1,2)) #行擴充套件
# a=np.tile(X,2) #一樣效果
print(a)
>>>
[[3 1 2 3 1 2]
[1 2 1 1 2 1]]
aa=np.tile(X,(2,1)) #列擴充套件
print(aa)
>>>
[[3 1 2]
[1 2 1]
[3 1 2]
[1 2 1]]
5、sum()函式的使用
# 定義一個數組:
X=np.array([[3.0,1.0,2.0,3.0,1.0,0],[1.0,2.0,1.0,0,0,0]])
print(X)
>>>
[[3. 1. 2. 3. 1. 0.]
[1. 2. 1. 0. 0. 0.]]
X=np.sum(X) # 計算矩陣中所有元素的和
print(X)
>>>
14.0
x=np.sum(X, axis=1) # 計算每一行之和
print(x)
>>>
[10. 4.]
x=np.sum(X,axis=0) # 計算每一列之和
print(x)
>>>
[4. 3. 3. 3. 1. 0.]
x=np.sum(X>0, axis=1) # 統計每一行大於0的數的個數,統計列axis=0
print(x)
>>>
[5 3]