數據挖掘——常用數據預處理

0、讀寫數據

(1)讀取txt文件

#讀取txt並拼接data
import pandas as pd
data=pd.read_table('1.txt', delimiter=',',dtype={'id':'int32','index':'int8'})
all=data.merge(data2,on='id',how='left').merge(data3,on=['id','index'],how='left')

(2)讀取和保存list文件

注意:list若存儲在txt中,需轉化爲str,讀取時也是str。爲了防止破壞list結構,可以轉化爲np.array存儲

#存
import numpy as np
a=np.array(test_courier_ids)
np.save('test_courier_ids.npy',a) 

#讀取
a=np.load('test_courier_ids.npy')
test_courier_ids=a.tolist() 

(3) 保存dataframe到csv

#dataframe保存爲csv文件
data.to_csv(path_or_buf="data.csv", index=False) 

1、排序

    DataFrame.sort_values(by=‘##’,axis=0,ascending=True, inplace=False, na_position=‘last’)

參數     說明
by     指定列名(axis=0或’index’)或索引值(axis=1或’columns’)
axis     若axis=0或’index’,則按照指定列中數據大小排序;若axis=1或’columns’,則按照指定索引中數據大小排序,默認axis=0
ascending     是否按指定列的數組升序排列,默認爲True,即升序排列
inplace     是否用排序後的數據集替換原來的數據,默認爲False,即不替換
na_position     {‘first’,‘last’},設定缺失值的顯示位置

2、對dataframe append新的一列或一行

import pandas as pd
    
    data = pd.DataFrame()
    a = {"x":1,"y":2}#一行
    data = data.append(a,ignore_index=True)
    print(data)


    a = [[1,2,3],[4,5,6]]#兩列
    data = data.append(a,ignore_index=True)
    a = [[7,8,9],[10,11,12]]
    data = data.append(a,ignore_index=True)
    print(data)

 

3、對數據拼接組合:merge 和join

注意:join只能用於行數一樣的(根據行索引進行合併)

參考:https://blog.csdn.net/winnertakeall/article/details/86662669


4、分組內排序

df.groupby('B', group_keys=False).apply(lambda x: x.sort_values('C', ascending=False))
[Out]    A    B       C
    3    4    a    201003
    0    2    a    200801
    1    3    b    200902
    2    5    b    200704

 

5、初始化新的一列

這一列全部賦值:

day1_all_train_data['date']='0201'

用lamada判斷條件賦值:lamada(表達式 if 條件 else (表達式 if 條件 else(…………)))

sourcedf['地區']=sourcedf['exam_district'].apply(lambda x:"全國" if x==1 else ("北京" if x==3 else("上海" if x==24 else "其他地區"))  )

6、pandas DataFrame中列太多,輸出顯示省略號

解決辦法:設置最多顯示的列數

pd.set_option('display.max_columns',20)

同理,可以設置顯示多少行:

pd.set_option('display.max_rows',10)

7、對某一列進行編碼

硬編碼:1,2,3,4,5....

 label = preprocessing.LabelEncoder()
    data_raw[x] = label.fit_transform(data_raw[x])

#將feature的值從0(或者1)開始進行連續編碼,比如color進行硬編碼,color的值有三個,分別爲編碼爲1,2,3

colorMap = {elem:index+1 for index,elem in enumerate(set(df["color"]))}
df['color'] = df['color'].map(colorMap)

onehot:  001 010 100


#將某個字段下所有值橫向展開,對於每條數據,其在對應展開的值上的值就是1
data1 = pd.get_dummies(df[["color"]])

#對多個feature 進行onehot:
df[[fea1,fea2..]]

#onehot以後的數據,如果需要原有的數據合併,直接join onehot的數據即可
res  = df.join(data1)

8、實現Unix時間戳(Unix timestamp) 和 普通時間轉換

http://tool.chinaz.com/Tools/unixtime.aspx

9、pandas: 根據一列的條件來替換另一列的值

#當條件>0.99時,old的值替換成對應new的值
df['old'] = df['old'].mask(df['條件'] > 0.99, df['new'])

https://blog.csdn.net/mym_74/article/details/102887459

10、強制類型轉換

df[' Min Humidity']=df[' Min Humidity'].astype('float64')
df=df.astype({'Max Humidity':'float64','Max Dew PointF':'float64'})

11、經緯度geohash

https://www.jianshu.com/p/2fd0cf12e5ba

https://blog.csdn.net/wangyaninglm/article/details/78936475#31_python3__geohash_522

12、判斷key是否存在於字典中


d = {'name':{},'age':{},'sex':{}}
#d.keys()是列出字典所有的key
print name in d.keys()
print name not in d.keys()
#結果返回True、False

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章