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

      網友投稿 1198 2025-03-31

      本文翻譯自Pandas官方文檔!

      由于許多潛在的 Pandas 用戶對 Excel 電子表格有一定的了解,因此本頁旨在提供一些案例,說明如何使用 Pandas 執行各Excel電子表格的各種操作。

      如果您不熟悉 Pandas,您可能需要先閱讀 10 Minutes的官方文檔,以熟悉該庫。

      按照慣例,我們按如下方式,導入 pandas 和 NumPy:

      import pandas as pd import numpy as np

      數據結構

      Pandas 中的 DataFrame 類似于 Excel 工作表。 雖然 Excel 工作簿可以包含多個工作表,但 Pandas DataFrames 獨立存在。

      序列是表示 DataFrame 的一列的數據結構。 使用序列類似于引用電子表格的列。

      每個 DataFrame 和 Series 都有一個索引,它們是數據行上的標簽。 在 Pandas 中,如果未指定索引,則默認使用 RangeIndex(第一行 = 0,第二行 = 1,依此類推),類似于電子表格中的行標題/數字。

      在 Pandas 中,索引可以設置為一個(或多個)唯一值,這就像在工作表中有一列用作行標識符一樣。 與大多數電子表格不同,這些索引值實際上可用于引用行。 (請注意,這可以在帶有結構化引用的 Excel 中完成。)例如,在電子表格中,您可以將第一行引用為 A1:Z1,而在 Pandas 中,您可以使用population.loc[‘Chicago’]。

      索引值也是持久的,所以如果你對 DataFrame 中的行重新排序,特定行的標簽不會改變。

      大多數 Pandas 操作返回 Series/DataFrame 的副本。 要使更改“保持不變”,您需要分配給一個新變量。

      sorted_df = df.sort_values("col1")

      或覆蓋原來的。

      df = df.sort_values("col1")

      如果您想就地操作,您將看到某些方法可用的 inplace=True 關鍵字參數。

      df.sort_values("col1", inplace=True)

      數據輸入和輸出

      在Excel電子表格中,值可以直接輸入到單元格中。

      我們可以用多種不同的方式構建一個DataFrame,但對于少量的值,通常將其指定為 Python 字典會很方便,其中鍵是列名,值是數據。

      df = pd.DataFrame({"x": [1, 3, 5], "y": [2, 4, 6]}) df

      結果如下:

      Excel 和 pandas 都可以從各種來源以各種格式導入數據。

      讓我們從 Pandas 測試中加載并顯示提示數據集,這是一個 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

      結果如下:

      與 Excel 的文本導入向導一樣,read_csv 可以采用多個參數來指定應如何解析數據。 例如,如果數據改為制表符分隔,并且沒有列名,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 文件格式。 在 Pandas 中,您使用特殊方法從/向 Excel 文件讀取和寫入。

      讓我們首先基于上面示例中的數據框,創建一個新的 Excel 文件。

      tips.to_excel("./tips.xlsx")

      如果您希望隨后訪問 tips.xlsx 文件中的數據,您可以使用以下命令將其讀入您的模塊。

      tips_df = pd.read_excel("./tips.xlsx", index_col=0)

      您剛剛就使用 Pandas 讀取了 Excel 文件!

      Excel電子表格程序一次只顯示一屏數據,然后允許您滾動,因此實際上沒有必要限制輸出。 在 Pandas 中,您需要更多地考慮控制 DataFrame 的顯示方式。

      默認情況下,pandas 會截斷大型 DataFrame 的輸出以顯示第一行和最后一行。 這可以通過更改 pandas 選項或使用 DataFrame.head() 或 DataFrame.tail() 來覆蓋。

      tips.head(5)

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

      結果如下:

      默認情況下,桌面電子表格軟件將保存為其各自的文件格式(.xlsx、.ods 等)。 但是,您可以保存為其他文件格式。

      pandas 可以創建 Excel 文件、CSV 或許多其他格式。

      數據操作

      在電子表格中,公式通常在單個單元格中創建,然后拖入其他單元格以計算其他列的公式。 在 Pandas 中,您可以直接對整列進行操作。

      pandas 通過在 DataFrame 中指定單個系列來提供矢量化操作。 可以以相同的方式分配新列。 DataFrame.drop() 方法從 DataFrame 中刪除一列。

      tips["total_bill"] = tips["total_bill"] - 2 tips["new_bill"] = tips["total_bill"] / 2 tips

      結果如下:

      請注意,我們不必告訴它逐個單元地進行減法——pandas 會為我們處理。

      在 Excel 中,過濾是通過圖形菜單完成的。

      可以通過多種方式過濾數據框,其中最直觀的是使用布爾索引。

      tips[tips["total_bill"] > 10]

      結果如下:

      上面的語句只是將一系列 True/False 對象傳遞給 DataFrame,返回所有帶有 True 的行。

      is_dinner = tips["time"] == "Dinner" is_dinner.value_counts() tips[is_dinner]

      結果如下:

      假設我們想要根據 total_bill 是小于還是大于 10 美元,來創建一個具有低值和高值的列。

      在Excel電子表格中,可以使用條件公式進行邏輯比較。 我們將使用 =IF(A2 < 10, "low", "high")的公式,將其拖到新存儲列中的所有單元格。

      使用 numpy 中的 where 方法可以完成 Pandas 中的相同操作。

      tips["bucket"] = np.where(tips["total_bill"] < 10, "low", "high") tips

      結果如下:

      本節將提到“日期”,但時間戳的處理方式類似。

      我們可以將日期功能分為兩部分:解析和輸出。 在Excel電子表格中,日期值通常會自動解析,但如果您需要,還有一個 DATEVALUE 函數。 在 Pandas 中,您需要在從 CSV 讀取時或在 DataFrame 中讀取一次時,將純文本顯式轉換為日期時間對象。

      解析后,Excel電子表格以默認格式顯示日期,但格式可以更改。 在 Pandas 中,您通常希望在使用日期進行計算時將日期保留為日期時間對象。 輸出部分日期(例如年份)是通過電子表格中的日期函數和 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"]]

      結果如下:

      在Excel電子表格中,您可以通過以下方式選擇所需的列:

      隱藏列;

      刪除列;

      引用從一個工作表到另一個工作表的范圍;

      由于Excel電子表格列通常在標題行中命名,因此重命名列只需更改第一個單元格中的文本即可。

      相同的操作在下面的Pandas中表示。

      tips[["sex", "total_bill", "tip"]]

      結果如下:

      tips.drop("sex", axis=1)

      結果如下:

      tips.rename(columns={"total_bill": "total_bill_2"})

      結果如下:

      Excel電子表格中的排序,是通過排序對話框完成的。

      pandas 有一個 DataFrame.sort_values() 方法,它需要一個列列表來排序。

      tips = tips.sort_values(["sex", "total_bill"]) tips

      結果如下:

      字符串處理

      在電子表格中,可以使用 LEN 函數找到文本中的字符數。 這可以與 TRIM 函數一起使用以刪除額外的空格。

      =LEN(TRIM(A2))

      您可以使用 Series.str.len() 找到字符串的長度。 在 Python 3 中,所有字符串都是 Unicode 字符串。 len 包括尾隨空格。 使用 len 和 rstrip 排除尾隨空白。

      tips["time"].str.len() tips["time"].str.rstrip().str.len()

      結果如下:

      請注意,這仍然會在字符串中包含多個空格,因此不是 100% 等效的。

      FIND電子表格函數返回子字符串的位置,第一個字符為 1。

      您可以使用 Series.str.find() 方法查找字符串列中字符的位置。 find 搜索子字符串的第一個位置。 如果找到子字符串,則該方法返回其位置。 如果未找到,則返回 -1。 請記住,Python 索引是從零開始的。

      tips["sex"].str.find("ale")

      結果如下:

      電子表格有一個 MID 公式,用于從給定位置提取子字符串。 獲取第一個字符:

      =MID(A2,1,1)

      使用 Pandas,您可以使用 [] 表示法按位置位置從字符串中提取子字符串。 請記住,Python 索引是從零開始的。

      tips["sex"].str[0:1]

      結果如下:

      在 Excel 中,您可以使用文本到列向導來拆分文本和檢索特定列。 (請注意,也可以通過公式來做到這一點。)

      在 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

      結果如下:

      Excel電子表格提供 UPPER、LOWER 和 PROPER 函數,分別用于將文本轉換為大寫、小寫和標題大小寫。

      等效的 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

      結果如下:

      合并

      合并示例中將使用以下表格:

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

      結果如下:

      在 Excel 中,可以通過 VLOOKUP 完成表格的合并。

      pandas DataFrames 有一個 merge() 方法,它提供了類似的功能。 數據不必提前排序,不同的連接類型是通過 how 關鍵字完成的。

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

      結果如下:

      與 VLOOKUP 相比,merge 有許多優點:

      查找值不需要是查找表的第一列;

      如果匹配多行,則每個匹配都會有一行,而不僅僅是第一行;

      它將包括查找表中的所有列,而不僅僅是單個指定的列;

      它支持更復雜的連接操作;

      其他注意事項

      在一組特定的單元格中按照設定的模式創建一系列數字。 在電子表格中,這將在輸入第一個數字后通過 shift+drag 或通過輸入前兩個或三個值然后拖動來完成。

      這可以通過創建一個系列并將其分配給所需的單元格來實現。

      df = pd.DataFrame({"AAA": [1] * 8, "BBB": list(range(0, 8))}) series = list(range(1, 5)) df.loc[2:5, "AAA"] = series df

      結果如下:

      Excel 具有刪除重復值的內置功能。 熊貓通過 drop_duplicates() 支持這一點。

      df = pd.DataFrame({ "class": ["A", "A", "A", "B", "C", "D"], "student_count": [42, 35, 42, 50, 47, 45], "all_pass": ["Yes", "Yes", "Yes", "No", "No", "Yes"]}) df.drop_duplicates() df.drop_duplicates(["class", "student_count"])

      結果如下:

      電子表格中的數據透視表可以通過重塑和數據透視表在 Pandas 中復制。 再次使用提示數據集,讓我們根據聚會的規模和服務器的性別找到平均小費。

      在 Excel 中,我們對數據透視表使用以下配置:

      等效的Pandas代碼。

      pd.pivot_table( tips, values="tip", index=["size"], columns=["sex"], aggfunc=np.average)

      結果如下:

      假設我們使用 RangeIndex(編號為 0、1 等),我們可以使用 DataFrame.append() 在 DataFrame 的底部添加一行。

      df new_row = {"class": "E", "student_count": 51, "all_pass": True} df.append(new_row, ignore_index=True)

      結果如下:

      Excel 查找對話框將您帶到匹配的單元格。 在 Pandas 中,這個操作一般是通過條件表達式一次對整個列或 DataFrame 完成。

      tips tips == "Sun" tips["day"].str.contains("S")

      結果如下:

      pandas 的 replace() 相當于 Excel 的 Replace All。

      tips.replace("Thu", "Thursday")

      結果如下:

      Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:怎么把多余的空白頁面刪除(怎么把多余的空白頁刪了)
      下一篇:Excel文件打開時所有的單元格格式都變成了日期格式
      相關文章
      亚洲国产老鸭窝一区二区三区| 国产成人毛片亚洲精品| 亚洲国产精品乱码一区二区 | 久久精品熟女亚洲av麻豆| 亚洲AV无码码潮喷在线观看| 亚洲精品乱码久久久久久蜜桃图片| AV在线亚洲男人的天堂| 亚洲欧洲日本在线| 亚洲精品午夜国产va久久| 亚洲av日韩av天堂影片精品| 久久精品国产精品亚洲下载| 亚洲人成无码www久久久| 日本亚洲高清乱码中文在线观看| 2022年亚洲午夜一区二区福利 | 国产亚洲中文日本不卡二区| 亚洲AV无一区二区三区久久| 亚洲s码欧洲m码吹潮| 亚洲国产成a人v在线观看| 久久久久亚洲AV片无码| 国产性爱在线观看亚洲黄色一级片| 亚洲人成网站在线观看播放动漫| 亚洲最大无码中文字幕| 国产亚洲综合色就色| 在线亚洲精品自拍| 国产精品亚洲专区无码不卡| 亚洲最大黄色网址| 亚洲国产精品福利片在线观看| 国产av无码专区亚洲国产精品| 亚洲AV日韩综合一区尤物 | 亚洲AV无码一区二区三区人| 久久久久亚洲AV片无码| 亚洲热线99精品视频| 亚洲av无码国产精品色在线看不卡 | 久久激情亚洲精品无码?V| 国产精品亚洲lv粉色| 亚洲国产精品自在自线观看| 国产成+人+综合+亚洲专| 亚洲人成在线影院| 亚洲aⅴ无码专区在线观看春色| 亚洲另类视频在线观看| 久久久久久久亚洲Av无码|