解決使用pandas聚類(lèi)時(shí)的小坑
問(wèn)題背景:
之前運(yùn)行測(cè)試好好的程序,忽然出現(xiàn)了報(bào)錯(cuò),還是merge時(shí)候的類(lèi)型錯(cuò)誤,這個(gè)bug有點(diǎn)蹊蹺。
問(wèn)題分析:
代碼:進(jìn)行聚類(lèi)之后計(jì)算平均值與方差
tmp_df = df[['object1', 'float']].groupby(['object1']).head(20).groupby(['object1'])['float'].agg(['mean', 'sum']).reset_index()
這個(gè)輸出的就是原本的數(shù)據(jù)類(lèi)型:一個(gè)object,一個(gè)float64
tmp_df = http_df[['object1', 'object2', 'float']].groupby(['object1', 'object2']).head(20).groupby(['object1', 'object2'])['float'].agg(['mean']).reset_index()
這個(gè)輸出就會(huì)修改object為float,
差別只在于一個(gè)是使用一個(gè)特征進(jìn)行聚類(lèi),一個(gè)是使用兩個(gè)特征進(jìn)行聚類(lèi)
問(wèn)題原因(個(gè)人猜測(cè),僅供參考):
pandas進(jìn)行聚類(lèi)的時(shí)候,就算之前已經(jīng)定好各個(gè)列的類(lèi)型,如果里邊沒(méi)有數(shù)據(jù)的時(shí)候,使用一列進(jìn)行聚類(lèi)不會(huì)修改列的類(lèi)型,但是如果同時(shí)使用兩列進(jìn)行聚類(lèi)就會(huì)修改列的類(lèi)型。
所以才會(huì)出現(xiàn)后面進(jìn)行merge時(shí)候,類(lèi)型不同報(bào)錯(cuò)
有數(shù)據(jù)輸入的時(shí)候這個(gè)報(bào)錯(cuò)不會(huì)發(fā)生,沒(méi)有數(shù)據(jù)的時(shí)候就會(huì)發(fā)生。
補(bǔ)充:python數(shù)據(jù)處理--按照數(shù)據(jù)差值大小進(jìn)行聚類(lèi)(歸類(lèi))
近來(lái)在做數(shù)據(jù)處理的工作中,遇到了數(shù)據(jù)分類(lèi)的問(wèn)題,利用python的各種方便庫(kù),寫(xiě)了這么個(gè)以數(shù)據(jù)差值大小進(jìn)行歸類(lèi)的方法。
應(yīng)用場(chǎng)景:
有一批數(shù)據(jù)集,如list=[1,2,3,4,9,10,11,20,20,1,1.1,2.1,100],將其按照數(shù)值大小進(jìn)行歸類(lèi),即數(shù)值比較接近的歸為一類(lèi),故需要先設(shè)置一個(gè)閾值,以進(jìn)行劃分。
具體實(shí)現(xiàn)如下:
其中輸入?yún)?shù)Data_set為輸入的數(shù)據(jù)集,可以為列表、數(shù)組、Series、DataFrame。threshold為數(shù)據(jù)大小分類(lèi)的門(mén)限值。
輸出class_k為數(shù)據(jù)歸類(lèi)列表集合,index_list為數(shù)據(jù)歸類(lèi)對(duì)應(yīng)的索引集合。
def threshold_cluster(Data_set,threshold):
#統(tǒng)一格式化數(shù)據(jù)為一維數(shù)組
stand_array=np.asarray(Data_set).ravel('C')
stand_Data=Series(stand_array)
index_list,class_k=[],[]
while stand_Data.any():
if len(stand_Data)==1:
index_list.append(list(stand_Data.index))
class_k.append(list(stand_Data))
stand_Data=stand_Data.drop(stand_Data.index)
else:
class_data_index=stand_Data.index[0]
class_data=stand_Data[class_data_index]
stand_Data=stand_Data.drop(class_data_index)
if (abs(stand_Data-class_data)<=threshold).any():
args_data=stand_Data[abs(stand_Data-class_data)<=threshold]
stand_Data=stand_Data.drop(args_data.index)
index_list.append([class_data_index]+list(args_data.index))
class_k.append([class_data]+list(args_data))
else:
index_list.append([class_data_index])
class_k.append([class_data])
return index_list,class_k
測(cè)試如下:
import numpy as np from pandas import Series,DataFrame Data_set=[1,1.1,0.9,-5,2,100,99,-4.2,10000,0] index_list,class_k=threshold_cluster(Data_set,5) index_list Out[10]: [[0, 1, 2, 4, 9], [3, 7], [5, 6], [8]] class_k Out[11]: [[1.0, 1.1, 0.9, 2.0, 0.0], [-5.0, -4.2], [100.0, 99.0], [10000.0]]
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
- Python基礎(chǔ)之pandas數(shù)據(jù)合并
- python-pandas創(chuàng)建Series數(shù)據(jù)類(lèi)型的操作
- Python數(shù)據(jù)分析之pandas函數(shù)詳解
- python基于Pandas讀寫(xiě)MySQL數(shù)據(jù)庫(kù)
- pandas讀取excel時(shí)獲取讀取進(jìn)度的實(shí)現(xiàn)
- pandas中.loc和.iloc以及.at和.iat的區(qū)別說(shuō)明
- 淺談Pandas dataframe數(shù)據(jù)處理方法的速度比較
- pandas 使用merge實(shí)現(xiàn)百倍加速的操作
- 詳細(xì)介紹在pandas中創(chuàng)建category類(lèi)型數(shù)據(jù)的幾種方法
- python中pandas.read_csv()函數(shù)的深入講解
- pandas 顛倒列順序的兩種解決方案
- pandas調(diào)整列的順序以及添加列的實(shí)現(xiàn)
- pandas快速處理Excel,替換Nan,轉(zhuǎn)字典的操作
- Python基礎(chǔ)之教你怎么在M1系統(tǒng)上使用pandas
相關(guān)文章
python?包(模塊?函數(shù)?類(lèi)?定義?導(dǎo)入)使用詳解
這篇文章主要為大家介紹了python?包(模塊?函數(shù)?類(lèi)?定義?導(dǎo)入)的使用詳細(xì)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
TensorFlow人工智能學(xué)習(xí)數(shù)據(jù)合并分割統(tǒng)計(jì)示例詳解
這篇文章主要為大家介紹了TensorFlow人工智能學(xué)習(xí)數(shù)據(jù)合并分割及統(tǒng)計(jì)的示例詳解有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
Python使用textract實(shí)現(xiàn)從各種文件中提取文本信息
textract是一個(gè)強(qiáng)大的Python庫(kù),可以用于從各種文件格式中提取文本,本文將介紹textract的使用場(chǎng)景,以及一些常用的Python代碼案例,希望對(duì)大家有所幫助2024-01-01
python通過(guò)imaplib模塊讀取gmail里郵件的方法
這篇文章主要介紹了python通過(guò)imaplib模塊讀取gmail里郵件的方法,涉及Python操作imaplib模塊操作郵件的相關(guān)技巧,需要的朋友可以參考下2015-05-05
Django-Rest-Framework 權(quán)限管理源碼淺析(小結(jié))
這篇文章主要介紹了Django-Rest-Framework 權(quán)限管理源碼淺析(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
pycharm不在cmd中運(yùn)行卻在python控制臺(tái)運(yùn)行問(wèn)題解決
這篇文章主要介紹了pycharm不在cmd中運(yùn)行卻在python控制臺(tái)運(yùn)行問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Python使用函數(shù)輔助工具簡(jiǎn)化開(kāi)發(fā)提高效率
這篇文章主要為大家介紹了Python使用函數(shù)輔助工具簡(jiǎn)化開(kāi)發(fā)提高效率,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01

