dataframe常用操作總結

2021-10-02 05:53:06 字數 3067 閱讀 3074

初始化

可以使用array+columns的格式,

d=pd.dataframe(np.arange(10).reshape(2,5))
df1 = pd.dataframe([['snow','m',22],['tyrion','m',32],['sansa','f',18],['arya','f',14]], columns=['name','gender','age'])
也可以使用字典+大括號的格式:

df = pd.dataframe()
讀csv檔案

使用pandas讀取csv檔案;iloc檢視並且修改指定位置的數值,但是不會改變原始的csv檔案,重新讀取,列印出來還是之前的資料。

csv檔案可能有空值,有可能空值全部處於一部分,比如說檔案前18行都是2列,但是之後18行是8列,這時讀取檔案就會報錯,提示在18行到19行的地方expected 2 fileds pandas,解決方法是在read_csv引數中加入error_bad_lines=false,這樣強制使其不會報錯,但是結果是只讀取到了前18行

可以先把之前的刪除,再使用to_csv寫入用來的路徑

儲存csv檔案

儲存時預設連同行列名也儲存下來,可以使用header=false,index=false去除。如果連同行列名字儲存下來,結果就是儲存的csv檔案會多出行列數。這時候再使用read_csv讀取,並且header=0,使用第一行名作索引,就會在最左上角的地方出現unnamed。這時候再儲存,再讀取,並且使用fscanf儲存到陣列中,就會出現全0的情況。

在read_csv時也有header,index_col.它們取0時是取第一行/列作為 索引。header=none和index_col=false等同,分別是對行列操作。

問題來了,如果header=0,選擇第一行作為索引,那如果第一行有重複數字怎麼辦呢,可能導致幾個列名是重複的。pandas的解決辦法是對重複出現的數字增加小數點的部分進行編號。2222,就會編碼為2.1,2.3,2.3,2.4作為索引。

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

c = ['a', 'b', 'c']

r = ['a', 'b', 'c']

df = pd.dataframe(data=data, columns=c, index=r)

excel檔案可以另存為csv格式,但是貌似會導致新生成的csv檔案行數特別多,很多行是nan

切片

對列作切片。df["***"]可以得到指定的列名為***的列資料構成的series。中還可以是list型別。

根據列資料的屬性作切片,df.select_dtype(exclude/include="object").colums

對列作刪除。df.drop(["***"],axis=1),刪除***列,注意軸方向要選取axis=1

drop(labels, axis=0, level=none, inplace=false, errors='raise'),預設按行刪除

對行作切片。df.loc,注意是兩層中括號,否則得到的是列形式的series。中括號中是行索引。

重置索引

在資料清洗後,一些資料被清除:

df.drop(index=[0, 1])     ************>df.drop([0, 1])***************>df.drop([0, 1]axis=0)

df.drop(columns=['b', 'c'])***********df.drop(['b', 'c'], axis=1)

保留下的dataframe,其每一行的索引和之前一樣,但是不同行之間的索引不再連續,這時用for迴圈按照行數遍歷就會出問題。我們可以使用reset_index()重置索引。重置前後列印df會發現df多出一列名為「index」或者「level_0」的列,這是因為reset_index()預設將原有的索引值儲存為新的一列。解決辦法也很簡單:

(df.reset_index(drop=true))
屬性

df.shape,得到行數與列數

df.head(),得到dataframe的前五行

df.tail(),得到dataframe的後五行

df.isnull().sum(),得到乙個series,索引是列名,資料值是該列中空值的數目

pd.melt,pivot的逆操作,將列名視作資料。

通過列的屬性選擇df的子集

df.select_dtypes(include='bool')
df.select_dtypes(exclude=['int'])
返回的仍然是dataframe,再使用columns則可以得到篩選之後的列名組成,形式如

index(['a', 'b', 'c'], dtype='object')
取values可以得到陣列型別的列名,再取tolist可以得到list

dtype可以得到dataframe的字段型別,使用astype可以對其轉換。

df['col2'] = df['col2'].astype('int')
取values之後其實就是ndarray型別的,這時如果想將dadaframe轉置,可以利用array的轉置t,然後列名和行名分別使用之前的行名和列名構建新的dataframe

df2 = pd.dataframe(df.values.t, index=df.columns, columns=df.index)
改變整列資料

一般每一列代表乙個特徵,為了驗證某一特徵對最終結果的影響,需要對該列資料進行整體變換,可以使用map的方法:

df["feature1"]=df["feature1"].map(lambda x:x*2)

DataFrame常用操作

檢視dataframe中的內容 persondf.show 檢視dataframe部分列中的內容 persondf.select persondf.col name show persondf.select col name col age show persondf.select name sho...

Dataframe常用操作

每次用dataframe的時候,各種操作想不起來,找來找去的 整理乙個自己常用的 刪除某列 del data column name data.drop winter axis 1,inplace true 刪除某行 data.drop data.index 16 17 inplace true r...

python的dataframe常用操作

data dataframe np.arange 16 reshape 4,4 index list abcd columns list wxyz print data print data 0 2 取前兩行資料 print print len data 求出一共多少行 print data.col...