最近除了畫圖就是做統計分析,發現r和pandas對於大資料處理十分方便,且語法上有相似之處。有的時候腦袋瓜子不靈光一迷糊引數就寫錯了,因此這裡記錄整理一下,方便日後檢視。
拖到最後可以看到一些常見問題的處理方法。
1.資料讀入
r語言:
read.table(file, sep='\t', header=true/false, check.names=true/false, skip=0, nrows=10, row.names=, col.names=)
header:邏輯值,為true則將第一行作為表頭,為false時可用col.names自定義表頭,若都沒有定義則表頭的名字為v1、v2、v3...;
check.names:邏輯值,預設為true,有沒有發現當原始列名稱為數字時入讀後會在前面加乙個x導致後期呼叫各種報錯?或者原始列名稱包含-符號的時候讀入後變成了.符號?check.names=false動動小指頭就能搞定;
skip:數值,控制跳過n行讀入;
nrows:數值,控制最大讀入行數;
row.names:向量,指定index;
pandas:
read_csv(file, sep='\t',header=0,index_col=0,skiprows=0,nrows=10,names=)
header:數值、列表或none,當設定為none時自動標號表頭為0、1、2、3...,此時可以利用names引數(相當於r中的col.names)傳遞乙個list自定義表頭。當設定為數值n時則是將第n行作為表頭,當設定成乙個list例如[0,1,3]時,這個list表示將檔案中的這些行作為列標題(意味著每一列有多個標題),介於中間的行將被忽略掉(例如本例中的資料1,2,4行將被作為多級標題出現,第3行資料將被丟棄,dataframe的資料從第5行開始);
index_col:數值或列表或false,表示指定第n列作為index,或傳入乙個列表則是多層索引,傳入false時pandas自動生成0、1、2...的索引;
skiprows:數值,與r中的skip引數對應;
nrows
:數值,與
r中的nrows
相同;
2.更改dataframe的行名和列名
r語言:
修改行名稱:
row.names(df)
修改列名稱:
names(df)
注:如果是r的matrix請用rownames和colnames呼叫;
pandas:
修改行名稱:
df.index=["one","two","three"]
修改列名稱:
df.columns=["one","two","three"]
注:哈哈是不是很容易混,沒關係,混著混著你就會慢慢發現不會寫了~
3.往dataframe裡新增新的行和列
r語言:
增加新的列:
df$newcol
增加新的行:
df
注:cbind、rbind可以實現行列的新增;
pandas:
增加新的列:
df['newcol']=["one","two","three"]
增加新的行:
df.loc['newraw']=["one","two","three"]
4.獲取dataframe的維度r語言:
pandas:nrow=dim(df)[1]
ncol=dim(df)[2]
nrow,ncol=df.shape
5.對dataframe的空值處理r語言:
df[is.na(df)]
pandas:
df=df.fillna(0)
6.dataframe取子集
r語言:
選取1、3、5行的第1、2列:
df_sub=df[c(1,3,5),c(1,2)]
選取1、3、5行的所有列:
df_sub=df[c(1,3,5),]
pandas:
選取1、3、5行的第1、2列:
df_sub=df.iloc[[0,2,4],[0,1]]
選取1、3、5行的所有列:
df_sub=df.iloc[[0,2,4],]
注:pandas在篩選時若按照列名稱檢索請使用loc,若按照列編號用iloc;
7.dateframe多條件篩選
r語言:
pandas:library(dplyr)
df_sub=filter(df, col1 == 1 & col2 >= 5.5)
df_sub=df[(df.col1==1) & (df.col2>=5.5)]
注:模糊匹配示例:df_sub=df[(df.col1.isin([1,2,3])) & (df.col2.str.contains("test"))];
8.dateframe按某列排序
r語言:
多列排序:
df_sort=df[order(df$col1, -df$col2),]
注:單列排序為df_sort=df[order(df$col1, decreasing=true),];
pandas:
多列排序:
df_sort=df.sort_values(by=["col1","col2"],ascending=[false,true])
9.dateframe某列去重複後取唯一值r語言:
col_uniq=unique(df$col1)
pandas:
col_uniq=df.col1.unique().tolist()
常見問題(mark一下,血淚的教訓):q1:r語言read.table的時候為什麼數字前會加x?為什麼-符號會被自動替換為.符號?
a1:因為read.table的時候預設check.names=true,設定check.names=false即可。
q2:pandas中dataframe(mydic)方法將字典轉換成資料框報錯「valueerror: if using all scalar values, you must pass an index」,怎麼回事?
a2:解決方法一,將字典的value都轉化成列表;解決方法二,df=dataframe(mydic)換成df=dataframe(list(mydic.items())。
q3:r中怎樣新增資料框中某列的對映作為新的一列?
a3:解決方法一,比較笨的辦法是for迴圈;解決方法二,先將對映關係生成乙個dataframe,然後利用merge函式合併兩個資料框,python的思路同理。
q4:r中怎樣讓數值型向量在引用時顯示本身的數值?
a5:在向量裡包含字元型變數的時候容易出現這個問題,此時需要將向量轉換成字元型再轉化成數值型才能顯示本身的數值df$v4=as.double(as.character(df$v4)),不然就全變成1,2,3,4,5之類的啦。
pandas中資料的處理
選擇col列的值大於0.5的行 df df col 0.5 按照列col1排序資料,預設公升序排列 df.sort values col1 按照列col1降序排列資料 df.sort values col2,ascending false 先按列col1公升序排列,後按col2降序排列資料 df.s...
Pandas中資料的缺失處理
在pandas資料處理中,資料值缺失是經常面臨的問題。如何查詢 處理缺失值就成了資料處理的必備方法。一 缺失值型別 pandas中缺失值主要有三種符號 np.nan none和nat。np.nan是缺失值的一種符號,nan意為not a number。它不等於任何東西,包括它本身。其次,在使用equ...
r語言隨機抽取資料框 R語言之資料處理 一
一 資料清洗 資料清洗簡單說就是處理缺失值和異常值的判斷,當然要根據實際情況來定義資料清洗的任務。1.缺失值處理 當我們面對的資料是比較大量的時候,就需要了解資料集中那些變數有缺失值 缺失的數量 屬於那種組合方式等有用資訊。此時可以使用mice包中的md.pattern 函式,該函式可生成乙個以矩陣...