2021-02-05 分類: 網站建設
pandas是基于numpy構建的,使數據分析工作變得更快更簡單的高級數據結構和操作工具。本文為大家帶來10個玩轉Python的小技巧,學會了分分鐘通關變大神!
1. read_csv
每個人都知道這個命令。但如果你要讀取很大的數據,嘗試添加這個參數:nrows = 5,以便在實際加載整個表之前僅讀取表的一小部分。然后你可以通過選擇錯誤的分隔符來避免錯誤(它不一定總是以逗號分隔)。
(或者,你可以在linux中使用'head'命令來檢查任何文本文件中的前5行,例如:head -c 5 data.txt)
然后,你可以使用df.columns.tolist()來提取列表中的所有列,然后添加usecols = ['c1','c2',...]參數以加載所需的列。此外,如果你知道幾個特定列的數據類型,則可以添加參數dtype = {'c1':str,'c2':int,...},以便數據加載得更快。此參數還有另一個優點,如果你有一個同時包含字符串和數字的列,那么將其類型聲明為字符串是一個好選擇,這樣就可以在嘗試使用此列作為鍵去合并表時不會出錯。
2. select_dtypes
如果必須在Python中進行數據預處理,那么這個命令可以節約一些時間。讀取表后,每列的默認數據類型可以是bool,int64,float64,object,category,timedelta64或datetime64。你可以先查看
- df.dtypes.value_counts()
命令分發的結果以了解數據幀的所有可能數據類型,然后執行
- df.select_dtypes(include = ['float64','int64'])
選擇僅具有數字特征的子數據幀。
3. Copy
這是一個重要的命令。如果執行以下命令:
- import pandas as pd
- df1 = pd.DataFrame({ ‘a’:[0,0,0], ‘b’: [1,1,1]})
- df2 = df1
- df2[‘a’] = df2[‘a’] + 1
- df1.head()
你會發現df1已經改變了。這是因為df2 = df1沒有復制df1的值并將其分配給df2,而是設置指向df1的指針。因此,df2的任何變化都會導致df1發生變化 要解決這個問題,你可以:
- df2
- = df1.copy()
- br
或者
- from copy import deepcopy
- df2 = deepcopy(df1)
4. Map
這是一個可以進行簡單數據轉換的命令。首先定義一個字典,其中'keys'是舊值,'values'是新值。
- level_map = {1: ‘high’, 2: ‘medium’, 3: ‘low’}
- df[‘c_level’] = df[‘c’].map(level_map)
舉幾個例子:True,False為1,0(用于建模); 定義水平; 用戶定義的詞法編碼。
5. apply or not apply?
如果我們想創建一個新的列,并將其他列作為輸入,那么apply函數有時非常有用。
- def rule(x, y):
- if x == ‘high’ and y > 10:
- return 1
- else:
- return 0
- df = pd.DataFrame({ 'c1':[ 'high' ,'high', 'low', 'low'], 'c2': [0, 23, 17, 4]})
- df['new'] = df.apply(lambda x: rule(x['c1'], x['c2']), axis = 1)
- df.head()
在上面的代碼中,我們定義了一個帶有兩個輸入變量的函數,并使用apply函數將其應用于列'c1'和'c2'。
但“apply函數”的問題是它有時太慢了。 如果你想計算兩列“c1”和“c2”的大值,你可以:
- df[‘maximum’] = df.apply(lambda x: max(x[‘c1’], x[‘c2’]), axis = 1)
但你會發現它比這個命令慢得多:
- df[‘maximum’] = df[[‘c1’,’c2']].max(axis =1)
注意:如果可以使用其他內置函數完成相同的工作(它們通常更快),請不要使用apply。例如,如果要將列'c'舍入為整數,請執行round(df ['c'],0)而非使用apply函數:
- df.apply(lambda x: round(x['c'], 0), axis = 1)
6. value counts
這是一個檢查值分布的命令。例如,如果你想檢查“c”列中每個值的可能值和頻率,可以執行以下操作
- df[‘c’].value_counts()
它有一些有用的技巧/參數:
- A. normalize = True:如果你要檢查頻率而不是計數。
- B. dropna = False:如果你要統計數據中包含的缺失值。
- C. df['c'].value_counts().reset_index(): 如果你想將stats表轉換成pandas數據幀并進行操作。
- D. df['c'].value_counts().reset_index().sort_values(by='index') : 顯示按值而不是按計數排序的統計數據。
7. 缺失值的數量
構建模型時,你可能希望排除具有很多缺失值或全是缺失值的行。你可以使用.isnull()和.sum()來計算指定列中缺失值的數量。
- import pandas as pd
- import numpy as np
- df = pd.DataFrame({ ‘id’: [1,2,3], ‘c1’:[0,0,np.nan], ‘c2’: [np.nan,1,1]})
- dfdf = df[[‘id’, ‘c1’, ‘c2’]]
- df[‘num_nulls’] = df[[‘c1’, ‘c2’]].isnull().sum(axis=1)
- df.head()
8. 選擇具有特定ID的行
在SQL中,我們可以使用SELECT * FROM ... WHERE ID('A001','C022',...)來獲取具有特定ID的記錄。如果想用Pandas做同樣的事情,你可以
- dfdf_filter = df[‘ID’].isin([‘A001’,‘C022’,...])
- df[df_filter]
9. Percentile groups
你有一個數字列,并希望將該列中的值分類為組,例如將列的前5%,分為組1,前5-20%分為組2,前20%-50%分為組3,最后50%分為組4。當然,你可以用pandas.cut來做,但這里提供另一個選擇:
- import numpy as np
- cut_points = [np.percentile(df[‘c’], i) for i in [50, 80, 95]]
- df[‘group’] = 1
- for i in range(3):
- df[‘group’] = df[‘group’] + (df[‘c’] < cut_points[i])
- # or <= cut_points[i]
這個指令使計算機運行的非???沒有使用應用功能)。
10. to_csv
這也是每個人都會使用的命令。這里指出兩個技巧。 第一個是
- print(df[:5].to_csv())
你可以使用此命令準確地打印出寫入文件的前五行數據。
另一個技巧是處理混合在一起的整數和缺失值。如果列同時包含缺失值和整數,則數據類型仍將是float而不是int。導出表時,可以添加float_format ='%。0f'將所有浮點數舍入為整數。如果只想要所有列的整數輸出,請使用此技巧,你將擺脫所有令人苦惱的'.0'。
分享名稱:看Pythoner如何玩轉Python
URL分享:http://m.newbst.com/news41/99241.html
成都網站建設公司_創新互聯,為您提供面包屑導航、標簽優化、動態網站、網站制作、網站內鏈、手機網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯
猜你還喜歡下面的內容