DataFrame踩坑整理(一)
不得不說,工作中幾乎天天跟DataFrame打交道,真的很有總結和記住的必要,話不多說,直接上乾貨。輸入以下語句前別忘記:
import pandas as pd
import numpy as np
1、讀入檔案:
df=pd。read_csv(path,names=[‘’,’’,’’]);
#讀入檔案用names,格式轉換用columns;
2、list轉dataframe :
df=pd。DataFrame(data,column=[‘a’, ’b’]) ;
Dataframe 轉list :
df。values。tolist();
某一列資料轉list :
list(df[‘a’]);
3、兩個dataframe 取交集,也可用於刪除重複專案
pd。merge(df1,df2);
#很好用,速度快。
4、兩個dataframe取並集(合併):
pd。concat([df1,df2])
#括號裡面一定要寫中括號。
#兩個表合併之後一定要
reset_index
,否則索引值不是按順序的。
5、DataFrame資料形式轉換 :
Df=pd。DataFrame(df,type=np。float);
6、刪除空值 :
df。dropna(axis=0,how=’any’,inplace=True);
#how的取值是any或者all。
7、填補缺失值 :
df。fillna(0,inplace=True) ;
#不要忘了inplace=True,否則不會在原表上修改;
8、計算缺失值個數:
list(data[‘a’]。isnull())。count(True);
9、資料替換 :
df[‘a’]=df[‘a’]。replace(‘。’ , ’0’);
10、根據一列資料生成另一列資料(例如歸一化):
dt=df。apply(lambda x:(x-np。min(x))/(np。max(x)-np。min(x)));
#apply+lamda這個語句還是好用的,例如給不同分值的人分等級,可以先做一個字典,直接對映到字典裡面的值。
11、篩選資料 :
df[df[‘a’]!=1][‘a’,’b’,’c’];
#選擇a這一列中不為1的資料;
12、資料篩選(按列) :
df。iloc[:, df。columns!=’flag’];
13、資料篩選(按值):
A_list=[0。1,0,2,0。3];
df[‘a’]。isin(alist);
14、取第一行:
df。iloc
[[1]] ;
#一定要寫兩個中括號;
15、元素定位 :
df。loc[0:3,[‘a’,’b’]] #loc需要寫列名;
df。iloc[0:3,[0,1]];
16、刪除某一列 :
del df[‘a’];
17、刪除多列 :
df=df。drop
([‘a’,’b’],axis=1);
18、抽樣 :
df[features]。sample(n=1000);
#但感覺這個不太好用,可以用np。random。choice;
19、展示重複值 :
df[df。duplicated(keep=’first’)];
#不加列名就是展示所有列;
20、刪除重複值 :
df。drop_duplicates(keep=’first’,inplace=True);
#這一步做完也一定要reset_index;
21、資料排序 :
df。sort_values
(‘a’,ascending=True,inplace=true);
22、插入新的一列 :
df[‘d’]=None;
#然後再用apply+lambda賦值;
23、某一列值分類計數 :
df[‘a’]。value_counts() ;
#要畫圖的話直接在後面加。plot(kind=’bar’);
24、求分位數 :
df[‘a’]。quantile(0。25);
25、資料儲存成csv檔案 :
df。to_csv(‘a。csv’,header=False,index=False);
#如果不寫後面兩個False,就會自動生成一列索引和一個表頭;
(未完待續。。。)
本文首發於:
更多內容,歡迎關注個人公眾號