日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dataframe常用操作总结

發布時間:2024/7/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dataframe常用操作总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

初始化

可以使用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({'a': [1, 2] * 3, ... 'b': [True, False] * 3, ... 'c': [1.0, 2.0] * 3})

讀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["XXX"]可以得到指定的列名為XXX的列數據構成的series。[]中還可以是list類型。

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

對列作刪除。df.drop(["XXX"],axis=1),刪除XXX列,注意軸方向要選取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.head().append(df.tail()),將前后五行連接出來,打印出來可以觀察數據

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)

https://www.tuziang.com/combat/732.html

https://www.jianshu.com/p/6e35d37e7709

總結

以上是生活随笔為你收集整理的dataframe常用操作总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。