<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          掌握 40 道實(shí)戰(zhàn)練習(xí)題,讓你輕松玩轉(zhuǎn) Python !

          共 5925字,需瀏覽 12分鐘

           ·

          2020-12-25 01:28

          Pandas 是使用最廣泛的數(shù)據(jù)分析和操作庫之一。它提供了許多功能和方法來清理、處理、操作和分析數(shù)據(jù)。

          本文我將列出 40 個(gè)示例,不僅包括常用函數(shù)和操作技巧,還包括一些功能強(qiáng)大卻非常低調(diào)的技巧,這些示例讓你輕松玩轉(zhuǎn) Python。文中數(shù)據(jù)文末可以獲取!

          1、讀取 csv 文件

          read_csv 提供了將 csv 文件讀取到 Pandas 數(shù)據(jù)幀的靈活方式。

          import?numpy?as?np
          import?pandas?as?pd
          marketing?=?pd.read_csv("DirectMarketing.csv")
          groceries?=?pd.read_csv("Groceries_dataset.csv")

          2、使用 astype 更改數(shù)據(jù)類型

          日期需要存儲(chǔ)在日期時(shí)間數(shù)據(jù)類型中,以便使用 pandas 的日期時(shí)間函數(shù),查看數(shù)據(jù)框的數(shù)據(jù)類型。

          groceries.dtypes

          我們也可以使用 astype 函數(shù)更改數(shù)據(jù)類型。

          groceries['Date']?=?groceries['Date'].astype("datetime64")
          groceries.dtypes
          Member_number???????????????int64
          Date???????????????datetime64[ns]
          itemDescription????????????object

          3、使用 to_datetime 更改數(shù)據(jù)類型

          我們還可以使用 to_datetime 為日期分配適當(dāng)?shù)臄?shù)據(jù)類型。語法與 astype 函數(shù)略有不同。

          groceries['Date']?=?pd.to_datetime(groceries['Date'])

          4、分析日期

          在第一個(gè)示例中,我提到 read_csv 在讀取 csv 文件方面非常靈活。它還可以處理日期。我們可以在讀取數(shù)據(jù)時(shí)為日期分配適當(dāng)?shù)臄?shù)據(jù)類型。這將使我們不必在以后更改數(shù)據(jù)類型。

          groceries?=?pd.read_csv("Groceries_dataset.csv",?parse_dates=['Date'])
          groceries.dtypes
          Member_number???????????????int64
          Date???????????????datetime64[ns]
          itemDescription????????????object

          5、使用 isin 方法進(jìn)行篩選

          有許多方法可以基于值篩選數(shù)據(jù)框。我們可以使用邏輯運(yùn)算符。

          isin 方法允許基于一組特定的值進(jìn)行篩選。我們可以只傳遞要篩選的值的列表。

          groceries[groceries.Member_number.isin([3737,?2433,?3915,?2625])].shape

          6、~ 操作符

          波浪(~)運(yùn)算符可理解為"不"。例如,我們可以在上一示例中找到篩選行的補(bǔ)充,只需在開頭添加波浪線運(yùn)算符。

          groceries[~groceries.Member_number.isin([3737,?2433,?3915,?2625])].shape
          (38639,?3)

          7、值計(jì)數(shù)與規(guī)范化

          value_counts是最常用的函數(shù)之一。它計(jì)算每個(gè)值的匹配次數(shù)并返回一個(gè)序列。如果與規(guī)范化參數(shù)一起使用,我們會(huì)獲得發(fā)生百分比的概覽。

          marketing.Catalogs.value_counts(normalize=True)

          8、將列設(shè)置為索引

          默認(rèn)情況下,Pandas 會(huì)為數(shù)據(jù)框分配整數(shù)索引,但我們也可以使用"索引"函數(shù)set_index。

          例如,我們可以將日期列設(shè)置為數(shù)據(jù)框的索引。

          groceries.set_index('Date',?inplace=True)

          9、重置索引

          刪除某些行時(shí),pandas 不會(huì)自動(dòng)重置索引。同樣,當(dāng)兩個(gè)數(shù)據(jù)框串聯(lián)時(shí),不會(huì)重置索引。在這種情況下,新數(shù)據(jù)框?qū)⒉痪哂羞B續(xù)索引值。

          在這種情況下,可以實(shí)用 reset_index 函數(shù)。

          groceries.reset_index(drop=True,?inplace=True)

          如果我們不設(shè)置為 True,則舊索引將作為數(shù)據(jù)幀中的新列保留。

          10、unique

          unique 函數(shù)返回列中唯一值的數(shù)組。

          groceries['itemDescription'].unique()[:5]
          array(['tropical?fruit',?'whole?milk',?'pip?fruit',?'other?vegetables','rolls/buns'],?dtype=object)

          11、創(chuàng)建較大尺寸的隨機(jī)樣本

          sample 函數(shù)可用于創(chuàng)建數(shù)據(jù)幀的隨機(jī)樣本。在機(jī)器學(xué)習(xí)中處理不平衡數(shù)據(jù)集時(shí),它會(huì)派上用場。

          我們只能創(chuàng)建小于原始樣本的樣本,除非替換參數(shù)更改為 true。讓我們只使用花費(fèi)少于 300 的來創(chuàng)建數(shù)據(jù)框的隨機(jī)樣本。

          less?=?marketing[marketing.AmountSpent?300].sample(n=400,?replace=True)
          less.shape
          (400,?10)

          12、組合數(shù)據(jù)框

          我們可以水平或垂直地將數(shù)據(jù)幀與串聯(lián)函數(shù)串聯(lián)。

          less.shape,?marketing.shape
          ((400,?10),?(1000,?10))
          new?=?pd.concat([marketing,?less])
          new.shape
          (1400,?10)

          13、按索引選擇行和列的范圍

          我們可以使用 iloc 函數(shù)選擇行和列的范圍。它接受所需行和列的索引。

          例如,我們可以選擇前 4 行和前 3 列,如下所示:

          marketing.iloc[:4,:3]

          14、按索引選擇特定行和列

          iloc 函數(shù)還接受值數(shù)組而不是范圍。我們可以傳遞一個(gè)列表或數(shù)字?jǐn)?shù)組。

          toselect?=?np.random.randint(100,?size=7)
          marketing.iloc[toselect,?[2,4,6]]

          15、按標(biāo)簽選擇行和列

          loc 函數(shù)與 iloc 函數(shù)一樣,但它接受標(biāo)簽而不是索引

          marketing.loc[toselect,['Gender','Age','Age','Catalogs']]

          16、從日期提取年和月

          pandas 提供了許多功能,在日期操作上,可以通過 dt 進(jìn)行操作使用。

          我們可以輕松地從日期中提取日期和月份,如下所示:

          groceries['Year']?=?groceries['Date'].dt.year
          groceries['Month']?=?groceries['Date'].dt.month

          17、刪除列和行

          在上一個(gè)示例中,我們創(chuàng)建了兩個(gè)新列。默認(rèn)情況下,panas 在數(shù)據(jù)框的末尾添加新列,但我們可以更改它。

          我們將在下一個(gè)示例中在特定位置添加新列。但是,我們首先需要?jiǎng)h除它們,這可以通過使用 drop 函數(shù)完成。

          groceries.drop(['Year','Month'],?axis=1,?inplace=True)

          18、插入列

          如果將年和月份列放在日期列之前,則它們可能更好。我們可以使用插入函數(shù)來完成此任務(wù)

          year?=?groceries['Date'].dt.year
          month?=?groceries['Date'].dt.month
          groceries.insert(1,?'Month',?month)
          groceries.insert(2,?'Year',?year)

          19、替換值

          在上一個(gè)示例中,我們創(chuàng)建了一個(gè)包含表示月數(shù)的月份列。你可能希望此列包含月份的名稱(即 1 月、2 月等)。

          有多種方法可以執(zhí)行此操作。我先告訴你更困難的方式。在下面的示例中,我們將看到一個(gè)更簡單的方法。

          我們可以使用替換函數(shù)將整數(shù)替換為月份名稱字符串。

          month_names?=?{1:'January',?2:'February',?3:'March',?4:'April',5:?'May',?6:'June',?7:'July',?8:'August',?9:'September',10:'October',?11:'November',?12:'December'}
          groceries.Month.replace(month_names,?inplace=True)

          我們創(chuàng)建了一個(gè)字典,然后將其傳遞給替換函數(shù)。

          20、month_name

          執(zhí)行上一步有更簡單的方法。

          groceries['Month']?=?groceries['Date'].dt.month_name()

          21、累計(jì)和

          累積函數(shù)允許基于另一列的累積總和創(chuàng)建列。

          marketing['CumAmountSpent']?=?marketing['AmountSpent'].cumsum()
          marketing

          22、字符串篩選

          str提供了許多功能和方法,可以加快處理文本數(shù)據(jù)。

          例如,我們可以檢查字符串是否包含一組特定的字符。典型的用法是否包含單詞。

          groceries.itemDescription.str.contains('milk').sum()
          groceries.itemDescription.str.contains('whole?milk').sum()

          23、根據(jù)長度字符串篩選

          我們還可以根據(jù)長度(即字符數(shù))篩選字符串。

          groceries[groceries.itemDescription.str.len()?>?20]\
          .itemDescription.unique()
          array(['fruit/vegetable?juice',?'packaged?fruit/vegetables','frozen?potato?products',?'Instant?food?products','female?sanitary?products',?'house?keeping?products','chocolate?marshmallow',?'long?life?bakery?product','flower?soil/fertilizer',?'preservation?products'],?dtype=object)

          24、繪制變量的分布

          pandas 不是數(shù)據(jù)可視化庫,因此未針對(duì)可視化任務(wù)進(jìn)行優(yōu)化。然而,它提供了繪圖函數(shù),我認(rèn)為這使得它非常方便地生成基本繪圖。

          例如,我們可以創(chuàng)建 kde 繪圖以查看工資列的分布。

          marketing.Salary.plot(kind='kde',?title='Distribution?of?Salary',figsize=(10,6))

          25、創(chuàng)建直方圖

          我們也可以使用繪圖函數(shù)來生成直方圖。

          marketing.Salary.plot(kind='hist',?title='Distribution?of?Salary',figsize=(10,6))

          26、月銷售額趨勢

          在此示例中,我們將合并幾個(gè)操作以創(chuàng)建顯示月銷售額趨勢的繪圖。

          groceries['month_name']?=?groceries['Date'].dt.month_name()
          groceries[['month_name','Date']].groupby('month_name').count().plot(title="Monthly?Sales",?figsize=(10,6))

          27、不同列的不同聚合功能

          可以按函數(shù)對(duì)組中的不同列應(yīng)用不同的聚合函數(shù)。我們可以傳遞一個(gè)字典來指示哪些函數(shù)將應(yīng)用于哪些列。

          marketing[['Married','Salary','AmountSpent']].groupby(['Married']).agg({'Salary':'mean',?'AmountSpent':'sum'})

          28、NamedAgg

          我們將執(zhí)行與上一示例中相同的操作,更改結(jié)果中的列名稱。

          marketing[['Married','Salary','AmountSpent']].groupby(['Married']).agg(
          ????Average_salary?=?pd.NamedAgg('Salary',?'mean'),
          ????Total_spent?=?pd.NamedAgg('AmountSpent',?'sum'))

          29、交叉表功能

          交叉選項(xiàng)卡函數(shù)用于基于指定的列、值和聚合函數(shù)創(chuàng)建交叉表。它類似于數(shù)據(jù)透視表。

          例如,我們可以計(jì)算年齡和性別列之間交叉類別的平均工資。

          pd.crosstab(index=marketing.Age,?columns=marketing.Gender,?values=marketing.Salary,?aggfunc='mean').round(1)

          30、交叉表函數(shù)-2

          我們將使用交叉表函數(shù)執(zhí)行一個(gè)稍微復(fù)雜一些的示例。我們可以傳遞多個(gè)列,并顯示總體值。

          pd.crosstab(index=[marketing.Age,?marketing.Married],?columns=marketing.Gender,values=marketing.Salary,?aggfunc='mean',margins=True).round(1)

          31、Pivot_table

          它非常類似于交叉表函數(shù),語法上存在一些小差異。我將創(chuàng)建與上一個(gè)示例相同的表,使用 pivot_table 函數(shù)。

          pd.pivot_table(data=marketing,?index=['Age',?'Married'],?columns='Gender',?values='Salary',?aggfunc='mean',margins=True).round(1)

          32、拆分字符串

          字符串訪問器可用于拆分或合并字符串。例如,我們可以拆分?jǐn)?shù)據(jù)框中日期的部分以獲取日期、月份和年。

          請注意,數(shù)據(jù)類型應(yīng)為對(duì)象或字符串,以便能夠應(yīng)用 str。

          groceries['month']?=?groceries['Date'].str.split('-',?expand=True)[1]

          33、在字符級(jí)別拆分字符串

          我們可以根據(jù)字符的位置選擇字符串的一部分。考慮前面的示例。我們可能想要檢索這些年的最后兩個(gè)字符。str 訪問器允許在字符串上編制索引。

          groceries['year']?=?groceries['Date'].str.split('-',?expand=True)[2].str[-2:]

          34、sidetable 側(cè)表

          sidetable是 pandas 的附加組件,它使得創(chuàng)建數(shù)據(jù)框摘要更加容易。它可以被視為值計(jì)數(shù)和交叉選項(xiàng)卡函數(shù)的組合。

          pip?install?sidetable
          import?sidetable
          groceries.stb.freq(['itemDescription'],?thresh=25)

          Freq 函數(shù)返回一個(gè)數(shù)據(jù)幀,該數(shù)據(jù)框傳達(dá)了 3 條信息。

          • 每個(gè)類別(或value_counts)的觀測值數(shù)(即行)。
          • 整個(gè)列(下列(正常=true)中每個(gè)value_counts的百分比。
          • 上述兩個(gè)的累積版本。

          sidetable 提供了更多的功能。如果你剛興趣可以進(jìn)一步了解。

          35、查找缺失值

          缺少值需要非常仔細(xì)地處理,以便進(jìn)行準(zhǔn)確和可靠的分析。

          isna 函數(shù)可以使用 查找數(shù)據(jù)幀中缺失的值。如果缺少該值,則返回 true。因此,我們可以通過應(yīng)用 sum 函數(shù)來計(jì)算缺失值的總數(shù)。

          groceries.isna().sum()
          Member_number??????0
          Date???????????????0
          itemDescription????0

          36、處理缺失值

          填充函數(shù)可用于處理缺失值。它提供了許多選項(xiàng)來填充缺失的值,如平均值、中位數(shù)或常量值。

          我們還可以使用上一個(gè)或下一個(gè)值來填充缺失的值。

          讓我們首先將幾個(gè)值更改為數(shù)據(jù)幀中的缺失值。

          groceries.iloc[[1,10,30],?[1,2]]?=?np.nan
          groceries.isna().sum()
          Member_number??????0
          Date???????????????3
          itemDescription????3

          我們可以使用最常見的項(xiàng)來填充項(xiàng)目描述列中缺少的值。對(duì)于日期列,我們將使用上一個(gè)值替換缺失值。

          groceries['itemDescription'].fillna(value=groceries['itemDescription'].mode()[0],?inplace=True)
          groceries['Date'].fillna(method='ffill',?inplace=True)
          groceries.isna().sum()
          Member_number??????0
          Date???????????????0
          itemDescription????0

          37、選擇數(shù)據(jù)類型

          可以使用select_dtypes函數(shù)選擇屬于或不屬于特定數(shù)據(jù)類型的列。

          marketing.select_dtypes(include='object').columns
          Index(['Age',?'Gender',?'OwnHome',?'Married',?'Location',?'History'],?dtype='object')
          marketing.select_dtypes(exclude='object').columns
          Index(['Salary',?'Children',?'Catalogs',?'AmountSpent'],?dtype='object')

          38、創(chuàng)建數(shù)據(jù)幀

          DataFrame 函數(shù)可用于創(chuàng)建數(shù)據(jù)幀。字典可以傳遞到 DataFrame 函數(shù)。鍵將是列名稱,值將表示行值。

          讓我們創(chuàng)建一個(gè)數(shù)據(jù)框。

          unique_items?=?groceries.itemDescription.unique()
          prices?=?pd.DataFrame({
          ????'itemDescription':?unique_items,
          ????'prices':np.random.randint(10,?size=len(unique_items))})

          39、合并數(shù)據(jù)幀

          合并函數(shù)可用于基于共享列或列合并兩個(gè)數(shù)據(jù)框。例如,我們可以根據(jù)物料描述列合并數(shù)據(jù)框。

          merged_df?=?groceries.merge(prices,?on='itemDescription')

          40、相關(guān)性

          在執(zhí)行機(jī)器學(xué)習(xí)任務(wù)時(shí),需要考慮數(shù)值變量之間的相關(guān)性。

          corr 函數(shù)計(jì)算相關(guān)性并返回包含變量之間相關(guān)系數(shù)的矩陣。

          文中數(shù)據(jù)領(lǐng)取方式:

          長按掃碼,發(fā)消息?[40]


          瀏覽 83
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大鸡巴久久久久久久久久 | 伊人在线久久 | 午夜精品一区二区三区在线视频99 | 69人人妻人人澡人人爽国产DVD | 日本A∨再现 |