R和pandas中的資料框處理操作彙總

2021-10-09 12:02:17 字數 4194 閱讀 3069

最近除了畫圖就是做統計分析,發現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語言:

nrow=dim(df)[1]

ncol=dim(df)[2]

pandas:

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語言:

library(dplyr)

df_sub=filter(df, col1 == 1 & col2 >= 5.5)

pandas:

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 函式,該函式可生成乙個以矩陣...