<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>

          我通宵翻譯Pandas官方文檔,寫了這一份Excel萬字肝貨操作!

          共 8869字,需瀏覽 18分鐘

           ·

          2021-09-03 22:38

          點擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注

          回復(fù)“書籍”即可獲贈Python從入門到進(jìn)階共10本電子書

          只解沙場為國死,何須馬革裹尸還。

          大家好,我是黃同學(xué)

          本文翻譯自Pandas官方文檔!
          文末有驚喜,看到最后你不虧!

          閱讀須知

          這篇萬字長文,是黃同學(xué)辛苦為大家辛苦翻譯排版。希望大家一定從頭到尾學(xué)習(xí),否則,可能會找不到操作的數(shù)據(jù)源。
          由于許多潛在的 Pandas 用戶對 Excel 電子表格有一定的了解,因此本頁旨在提供一些案例,說明如何使用 Pandas 執(zhí)行各Excel電子表格的各種操作。
          如果您不熟悉 Pandas,您可能需要先閱讀 10 Minutes的官方文檔,以熟悉該庫。
          按照慣例,我們按如下方式,導(dǎo)入 pandas 和 NumPy:
          import pandas as pd
          import numpy as np

          數(shù)據(jù)結(jié)構(gòu)

          1. 通用術(shù)語翻譯
          2. DataFrame
          Pandas 中的 DataFrame 類似于 Excel 工作表。雖然 Excel 工作簿可以包含多個工作表,但 Pandas DataFrames 獨立存在。
          3. Series
          序列是表示 DataFrame 的一列的數(shù)據(jù)結(jié)構(gòu)。使用序列類似于引用電子表格的列。
          4. Index
          每個 DataFrame 和 Series 都有一個索引,它們是數(shù)據(jù)行上的標(biāo)簽。在 Pandas 中,如果未指定索引,則默認(rèn)使用 RangeIndex(第一行 = 0,第二行 = 1,依此類推),類似于電子表格中的行標(biāo)題/數(shù)字。
          在 Pandas 中,索引可以設(shè)置為一個(或多個)唯一值,這就像在工作表中有一列用作行標(biāo)識符一樣。與大多數(shù)電子表格不同,這些索引值實際上可用于引用行。(請注意,這可以在帶有結(jié)構(gòu)化引用的 Excel 中完成。)例如,在電子表格中,您可以將第一行引用為 A1:Z1,而在 Pandas 中,您可以使用population.loc['Chicago']。
          索引值也是持久的,所以如果你對 DataFrame 中的行重新排序,特定行的標(biāo)簽不會改變。
          5. 副本與就地操作
          大多數(shù) Pandas 操作返回 Series/DataFrame 的副本。要使更改“保持不變”,您需要分配給一個新變量。
          sorted_df = df.sort_values("col1")
          或覆蓋原來的。
          df = df.sort_values("col1")
          如果您想就地操作,您將看到某些方法可用的 inplace=True 關(guān)鍵字參數(shù)。
          df.sort_values("col1", inplace=True)

          數(shù)據(jù)輸入和輸出

          1. 利用值構(gòu)造一個數(shù)據(jù)框DataFrame
          在Excel電子表格中,值可以直接輸入到單元格中。
          我們可以用多種不同的方式構(gòu)建一個DataFrame,但對于少量的值,通常將其指定為 Python 字典會很方便,其中鍵是列名,值是數(shù)據(jù)。
          df = pd.DataFrame({"x": [135], "y": [246]})
          df
          結(jié)果如下:
          2. 讀取外部數(shù)據(jù)
          Excel 和 pandas 都可以從各種來源以各種格式導(dǎo)入數(shù)據(jù)。
          CSV
          讓我們從 Pandas 測試中加載并顯示提示數(shù)據(jù)集,這是一個 CSV 文件。在 Excel 中,您將下載并打開 CSV。在 pandas 中,您將 CSV 文件的 URL 或本地路徑傳遞給 read_csv()。
          url = ("https://raw.github.com/pandas-dev/pandas/master/pandas/tests/io/data/csv/tips.csv")
          tips = pd.read_csv(url)
          tips
          結(jié)果如下:
          與 Excel 的文本導(dǎo)入向?qū)б粯?,read_csv 可以采用多個參數(shù)來指定應(yīng)如何解析數(shù)據(jù)。例如,如果數(shù)據(jù)改為制表符分隔,并且沒有列名,pandas 命令將是:
          tips = pd.read_csv("tips.csv", sep="\t", header=None)
          # 或者,read_table 是帶有制表符分隔符的 read_csv 的別名
          tips = pd.read_table("tips.csv", header=None)
          Excel文件
          Excel 通過雙擊或使用打開菜單打開各種 Excel 文件格式。在 Pandas 中,您使用特殊方法從/向 Excel 文件讀取和寫入。
          讓我們首先基于上面示例中的數(shù)據(jù)框,創(chuàng)建一個新的 Excel 文件。
          tips.to_excel("./tips.xlsx")
          如果您希望隨后訪問 tips.xlsx 文件中的數(shù)據(jù),您可以使用以下命令將其讀入您的模塊。
          tips_df = pd.read_excel("./tips.xlsx", index_col=0)
          您剛剛就使用 Pandas 讀取了 Excel 文件!
          3.  限制輸出
          Excel電子表格程序一次只顯示一屏數(shù)據(jù),然后允許您滾動,因此實際上沒有必要限制輸出。在 Pandas 中,您需要更多地考慮控制 DataFrame 的顯示方式。
          默認(rèn)情況下,pandas 會截斷大型 DataFrame 的輸出以顯示第一行和最后一行。這可以通過更改 pandas 選項或使用 DataFrame.head() 或 DataFrame.tail() 來覆蓋。
          tips.head(5)
          結(jié)果如下:
          4. 導(dǎo)出數(shù)據(jù)
          默認(rèn)情況下,桌面電子表格軟件將保存為其各自的文件格式(.xlsx、.ods 等)。但是,您可以保存為其他文件格式。
          pandas 可以創(chuàng)建 Excel 文件、CSV 或許多其他格式。

          數(shù)據(jù)操作

          1. 列操作
          在電子表格中,公式通常在單個單元格中創(chuàng)建,然后拖入其他單元格以計算其他列的公式。在 Pandas 中,您可以直接對整列進(jìn)行操作。
          pandas 通過在 DataFrame 中指定單個系列來提供矢量化操作。可以以相同的方式分配新列。DataFrame.drop() 方法從 DataFrame 中刪除一列。
          tips["total_bill"] = tips["total_bill"] - 2
          tips["new_bill"] = tips["total_bill"] / 2
          tips
          結(jié)果如下:
          請注意,我們不必告訴它逐個單元地進(jìn)行減法——pandas 會為我們處理。
          2. 過濾
          在 Excel 中,過濾是通過圖形菜單完成的。
          可以通過多種方式過濾數(shù)據(jù)框,其中最直觀的是使用布爾索引。
          tips[tips["total_bill"] > 10]
          結(jié)果如下:
          上面的語句只是將一系列 True/False 對象傳遞給 DataFrame,返回所有帶有 True 的行。
          is_dinner = tips["time"] == "Dinner"
          is_dinner.value_counts()
          tips[is_dinner]
          結(jié)果如下:
          3. If/then邏輯
          假設(shè)我們想要根據(jù) total_bill 是小于還是大于 10 美元,來創(chuàng)建一個具有低值和高值的列。
          在Excel電子表格中,可以使用條件公式進(jìn)行邏輯比較。我們將使用 =IF(A2 < 10, "low", "high")的公式,將其拖到新存儲列中的所有單元格。
          使用 numpy 中的 where 方法可以完成 Pandas 中的相同操作。
          tips["bucket"] = np.where(tips["total_bill"] < 10"low""high")
          tips
          結(jié)果如下:
          4. 日期功能
          本節(jié)將提到“日期”,但時間戳的處理方式類似。
          我們可以將日期功能分為兩部分:解析和輸出。在Excel電子表格中,日期值通常會自動解析,但如果您需要,還有一個 DATEVALUE 函數(shù)。在 Pandas 中,您需要在從 CSV 讀取時或在 DataFrame 中讀取一次時,將純文本顯式轉(zhuǎn)換為日期時間對象。
          解析后,Excel電子表格以默認(rèn)格式顯示日期,但格式可以更改。在 Pandas 中,您通常希望在使用日期進(jìn)行計算時將日期保留為日期時間對象。輸出部分日期(例如年份)是通過電子表格中的日期函數(shù)和 Pandas 中的日期時間屬性完成的。
          給定電子表格 A 列和 B 列中的 date1 和 date2,您可能有以下公式:
          等效的Pandas操作如下所示。
          tips["date1"] = pd.Timestamp("2013-01-15")
          tips["date2"] = pd.Timestamp("2015-02-15")
          tips["date1_year"] = tips["date1"].dt.year
          tips["date2_month"] = tips["date2"].dt.month
          tips["date1_next"] = tips["date1"] + pd.offsets.MonthBegin()
          tips["months_between"] = tips["date2"].dt.to_period("M") - tips["date1"].dt.to_period("M")
          tips[["date1""date2""date1_year""date2_month""date1_next""months_between"]]
          結(jié)果如下:
          5. 列的選擇
          在Excel電子表格中,您可以通過以下方式選擇所需的列:
          • 隱藏列;
          • 刪除列;
          • 引用從一個工作表到另一個工作表的范圍;
          由于Excel電子表格列通常在標(biāo)題行中命名,因此重命名列只需更改第一個單元格中的文本即可。
          相同的操作在下面的Pandas中表示。
          保留某些列
          tips[["sex""total_bill""tip"]]
          結(jié)果如下:
          刪除某些列
          tips.drop("sex", axis=1)
          結(jié)果如下:
          重命名列
          tips.rename(columns={"total_bill""total_bill_2"})
          結(jié)果如下:
          6. 按值排序
          Excel電子表格中的排序,是通過排序?qū)υ捒蛲瓿傻摹?/span>

          pandas 有一個 DataFrame.sort_values() 方法,它需要一個列列表來排序。
          tips = tips.sort_values(["sex""total_bill"])
          tips
          結(jié)果如下:

          字符串處理

          1. 查找字符串長度
          在電子表格中,可以使用 LEN 函數(shù)找到文本中的字符數(shù)。這可以與 TRIM 函數(shù)一起使用以刪除額外的空格。
          =LEN(TRIM(A2))
          您可以使用 Series.str.len() 找到字符串的長度。在 Python 3 中,所有字符串都是 Unicode 字符串。len 包括尾隨空格。使用 len 和 rstrip 排除尾隨空白。
          tips["time"].str.len()
          tips["time"].str.rstrip().str.len()
          結(jié)果如下:
          請注意,這仍然會在字符串中包含多個空格,因此不是 100% 等效的。
          2. 查找子串的位置
          FIND電子表格函數(shù)返回子字符串的位置,第一個字符為 1。
          您可以使用 Series.str.find() 方法查找字符串列中字符的位置。find 搜索子字符串的第一個位置。如果找到子字符串,則該方法返回其位置。如果未找到,則返回 -1。請記住,Python 索引是從零開始的。
          tips["sex"].str.find("ale")
          結(jié)果如下:
          3. 按位置提取子串
          電子表格有一個 MID 公式,用于從給定位置提取子字符串。獲取第一個字符:
          =MID(A2,1,1)
          使用 Pandas,您可以使用 [] 表示法按位置位置從字符串中提取子字符串。請記住,Python 索引是從零開始的。
          tips["sex"].str[0:1]
          結(jié)果如下:
          4. 提取第n個單詞
          在 Excel 中,您可以使用文本到列向?qū)聿鸱治谋竞蜋z索特定列。(請注意,也可以通過公式來做到這一點。)
          在 Pandas 中提取單詞最簡單的方法是用空格分割字符串,然后按索引引用單詞。請注意,如果您需要,還有更強大的方法。
          firstlast = pd.DataFrame({"String": ["John Smith""Jane Cook"]})
          firstlast["First_Name"] = firstlast["String"].str.split(" ", expand=True)[0]
          firstlast["Last_Name"] = firstlast["String"].str.rsplit(" ", expand=True)[0]
          firstlast
          結(jié)果如下:
          5. 大小寫轉(zhuǎn)換
          Excel電子表格提供 UPPER、LOWER 和 PROPER 函數(shù),分別用于將文本轉(zhuǎn)換為大寫、小寫和標(biāo)題大小寫。
          等效的 Pandas 方法是 Series.str.upper()、Series.str.lower() 和 Series.str.title()。
          firstlast = pd.DataFrame({"string": ["John Smith""Jane Cook"]})
          firstlast["upper"] = firstlast["string"].str.upper()
          firstlast["lower"] = firstlast["string"].str.lower()
          firstlast["title"] = firstlast["string"].str.title()
          firstlast
          結(jié)果如下:

          合并

          合并示例中將使用以下表格:
          df1 = pd.DataFrame({"key": ["A""B""C""D"], "value": np.random.randn(4)})
          df2 = pd.DataFrame({"key": ["B""D""D""E"], "value": np.random.randn(4)})
          結(jié)果如下:
          在 Excel 中,可以通過 VLOOKUP 完成表格的合并。
          pandas DataFrames 有一個 merge() 方法,它提供了類似的功能。數(shù)據(jù)不必提前排序,不同的連接類型是通過 how 關(guān)鍵字完成的。
          inner_join = df1.merge(df2, on=["key"], how="inner")
          left_join = df1.merge(df2, on=["key"], how="left")
          right_join = df1.merge(df2, on=["key"], how="right")
          outer_join = df1.merge(df2, on=["key"], how="outer")
          結(jié)果如下:
          與 VLOOKUP 相比,merge 有許多優(yōu)點:
          • 查找值不需要是查找表的第一列;
          • 如果匹配多行,則每個匹配都會有一行,而不僅僅是第一行;
          • 它將包括查找表中的所有列,而不僅僅是單個指定的列;
          • 它支持更復(fù)雜的連接操作;

          其他注意事項

          1. 填充柄
          在一組特定的單元格中按照設(shè)定的模式創(chuàng)建一系列數(shù)字。在電子表格中,這將在輸入第一個數(shù)字后通過 shift+drag 或通過輸入前兩個或三個值然后拖動來完成。
          這可以通過創(chuàng)建一個系列并將其分配給所需的單元格來實現(xiàn)。
          df = pd.DataFrame({"AAA": [1] * 8"BBB": list(range(08))})
          series = list(range(15))
          df.loc[2:5"AAA"] = series
          df
          結(jié)果如下:
          2. 刪除重復(fù)項
          Excel 具有刪除重復(fù)值的內(nèi)置功能。熊貓通過 drop_duplicates() 支持這一點。
          df = pd.DataFrame({
               "class": ["A""A""A""B""C""D"],
               "student_count": [423542504745],
               "all_pass": ["Yes""Yes""Yes""No""No""Yes"]})
          df.drop_duplicates()
          df.drop_duplicates(["class""student_count"])
          結(jié)果如下:
          3. 數(shù)據(jù)透視表
          電子表格中的數(shù)據(jù)透視表可以通過重塑和數(shù)據(jù)透視表在 Pandas 中復(fù)制。再次使用提示數(shù)據(jù)集,讓我們根據(jù)聚會的規(guī)模和服務(wù)器的性別找到平均小費。
          在 Excel 中,我們對數(shù)據(jù)透視表使用以下配置:
          等效的Pandas代碼。
          pd.pivot_table(
               tips, 
               values="tip"
               index=["size"], 
               columns=["sex"], 
               aggfunc=np.average)
          結(jié)果如下:
          4. 添加一行
          假設(shè)我們使用 RangeIndex(編號為 0、1 等),我們可以使用 DataFrame.append() 在 DataFrame 的底部添加一行。
          df
          new_row = {"class""E""student_count"51"all_pass"True}
          df.append(new_row, ignore_index=True)
          結(jié)果如下:
          5. 查找和替換
          Excel 查找對話框?qū)⒛鷰У狡ヅ涞膯卧瘛T?Pandas 中,這個操作一般是通過條件表達(dá)式一次對整個列或 DataFrame 完成。
          tips
          tips == "Sun"
          tips["day"].str.contains("S")
          結(jié)果如下:
          pandas 的 replace() 相當(dāng)于 Excel 的 Replace All。
          tips.replace("Thu""Thursday")
          結(jié)果如下:

          ------------------- End -------------------

          往期精彩文章推薦:

          歡迎大家點贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請在后臺回復(fù)【入群

          萬水千山總是情,點個【在看】行不行

          /今日留言主題/

          隨便說一兩句吧~~

          瀏覽 48
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  九一综合色 | 麻豆传媒视频免费观看网站网址 | 天天操天天干天天翘 | 国产日韩视频在线 | 国产精品久久久久永久免费看 |