亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python的pandas有哪些基本操作

發布時間:2021-07-05 17:57:12 來源:億速云 閱讀:140 作者:chen 欄目:編程語言

本篇內容介紹了“python的pandas有哪些基本操作”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

概述

python 的 pandas 庫用來處理表格類型(也就是矩陣)的數據非常方便, 這個庫用來在可視化之前對數據進行變換,計算和匯總之類的操作再好不過。

下面整理了最近我在做數據分析的短視頻時常用的一些方法。

讀取數據文件

做視頻之前,我采集的數據都是用 csv 格式保存的,這里主要演示 pandas 庫的 read_csv 方法。 讀取其他文件格式的方式類似,主要是函數名稱不同,參數都差不多。

讀取 csv 文件

讀取 csv 文件非常簡單,指定 csv 文件的路徑即可。 測試用 csv 文件內容如下:

IP地址,手機號,登錄日期
223.104.147.75,19951762925,"2021-04-15 01:33:08"
117.181.52.75,15873565020,"2021-04-15 01:48:24"
42.49.165.99,18673535620,"2021-04-15 02:14:40"
14.116.141.24,18673535620,"2021-04-15 05:01:40"
# -*- coding: utf-8 -*-

import pandas as pd

def test():
    df = pd.read_csv(
        "~/share/test.csv",
    )
    print(df)


if __name__ == "__main__":
    test()

程序運行結果:

$ python test.py
                  IP地址          手機號碼                 登錄日期
0       223.104.147.75  1.995176e+10  2021-04-15 01:33:08
1        117.181.52.75  1.587357e+10  2021-04-15 01:48:24
2         42.49.165.99  1.867354e+10  2021-04-15 02:14:40
3        14.116.141.24  1.867354e+10  2021-04-15 05:01:40

讀取之后修改列的名稱,指定列的類型

csv 文件中的列名有時候沒有,或者有時候是中文的,列名是后續進行操作數據時使用的 key,一般在讀取時將其轉換成英文。 同時,可以看出手機號碼默認被當成數值類型了,所以用科技計數法來表示,在讀取數據時,可以設置此列為字符串類型。

# -*- coding: utf-8 -*-

import pandas as pd

def test():
    df = pd.read_csv(
        "~/share/test.csv",
        skiprows=[0],
        names=["ip", "mobile", "login_date"],
        dtype={"mobile": str},
    )
    print(df)


if __name__ == "__main__":
    test()
  1. skiprows 可以用來忽略第一行標題,因為我們用 names 指定了新的標題名稱。

  2. dtype 用來指定某列的類型,不指定的話,系統自動推斷類型。

程序運行結果:

$ python test.py
                    ip       mobile           login_date
0       223.104.147.75  19951762925  2021-04-15 01:33:08
1        117.181.52.75  15873565020  2021-04-15 01:48:24
2         42.49.165.99  18673535620  2021-04-15 02:14:40
3        14.116.141.24  18673535620  2021-04-15 05:01:40

列的名稱已替換,手機號碼也正常顯示。

讀取 csv 文件的某幾列

在分析數據時,有時候我們不需要采集的所有數據,只取其中需要的幾列數據。 比如上面的 csv,如果只分析 IP 地址和登錄時間,讀取文件時,可以只取這 2 列數據。

# -*- coding: utf-8 -*-

import pandas as pd

def test():
    df = pd.read_csv(
        "~/share/test.csv",
        skiprows=[0],
        usecols=[0, 2],
        names=["ip", "login_date"],
    )
    print(df)


if __name__ == "__main__":
    test()

通過 usecols 來指定需要那幾列。 程序運行結果:

$ python test.py
                    ip           login_date
0       223.104.147.75  2021-04-15 01:33:08
1        117.181.52.75  2021-04-15 01:48:24
2         42.49.165.99  2021-04-15 02:14:40
3        14.116.141.24  2021-04-15 05:01:40

讀取時對某些列進行轉換

有些列的格式,比如日期格式的列,可能在分析之前就要進行轉換處理。 上面的例子中,如果是按日分析登錄情況,就不要時分秒的部分,這樣我們可以在讀取時就進行轉換處理。

# -*- coding: utf-8 -*-
from datetime import datetime

import pandas as pd

def test():
    df = pd.read_csv(
        "~/share/test.csv",
        skiprows=[0],
        usecols=[0, 2],
        names=["ip", "login_date"],
        converters={
            "login_date": lambda d: datetime.strptime(d, "%Y-%m-%d %H:%M:%S").strftime(
                "%Y-%m-%d"
            )
        },
    )
    print(df)


if __name__ == "__main__":
    test()

通過 converters 參數轉換某列。 程序運行結果:

$ python test.py
                    ip  login_date
0       223.104.147.75  2021-04-15
1        117.181.52.75  2021-04-15
2         42.49.165.99  2021-04-15
3        14.116.141.24  2021-04-15

數據的操作

讀取文件之后,得到一個 dataframe 結構,它可以當成一個矩陣來看。 基于 dataframe,可以完成各種計算操作,pandas 提供的 API 也很多,這里只介紹我平時常用的一部分。

分組統計

之前做房價分析時,按月分析成交平均值和成交總套數時,都用到了分組統計。 分析的第一步就是將數據分組。

# -*- coding: utf-8 -*-

import pandas as pd

test_data = {
    "name": ["a", "b", "c", "d"],
    "value": [11, 20, 31, 42],
    "date": ["2017", "2018", "2018", "2017"],
}


def main():
    df = pd.DataFrame(test_data)
    data = df.groupby("date")
    data = data.sum()
    print(data)


if __name__ == "__main__":
    main()

按照日期分組之后,運行結果如下:

$ python test2.py
      value
date
2017     53
2018     51

這里是求和,groupby 之后同樣也可以求平均值。

數據集變換

數據集變換是用的比較多的,因為采集和分析的過程是分開的,采集的目的是數據盡量全和準確。 所以分析之前會根據分析目的會對數據進行適當的變換。

行操作

行操作主要指從數據集中過濾出一部分數據,或者合并多個數據集。

  1. 過濾數據

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    
    test_data = {
        "name": ["a", "b", "c", "d"],
        "value": [11, 20, 31, 42],
        "date": ["2017", "2018", "2018", "2017"],
    }
    
    
    def main():
        df = pd.DataFrame(test_data)
        # 選取2017年的數據
        data2017 = df[df["date"] == "2017"]
        print(data2017)
    
        # 選取value>30 的數據
        data30 = df[df["value"] > 30]
        print(data30)
    
    
    if __name__ == "__main__":
        main()


    運行結果如下:

    $ python test2.py
      name  value  date
    0    a     11  2017
    3    d     42  2017
      name  value  date
    2    c     31  2018
    3    d     42  2017


    可以很方便的直接使用列名來過濾數據行

  2. 合并數據集

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    
    test_data_01 = {
        "name": ["a", "b", "c", "d"],
        "value": [11, 20, 31, 42],
        "date": ["2017", "2018", "2018", "2017"],
    }
    
    test_data_02 = {
        "name": ["a", "b", "c", "d"],
        "value": [31, 40, 51, 72],
        "date": ["2019", "2020", "2020", "2019"],
    }
    
    
    def main():
        df01 = pd.DataFrame(test_data_01)
        df02 = pd.DataFrame(test_data_02)
    
        # 合并數據集時,設置 ignore_index = True,可以避免index重復
        data = pd.concat([df01, df02], ignore_index=True)
        print(data)
    
    
    if __name__ == "__main__":
        main()


    運行結果如下:

    $ python test2.py
      name  value  date
    0    a     11  2017
    1    b     20  2018
    2    c     31  2018
    3    d     42  2017
    4    a     31  2019
    5    b     40  2020
    6    c     51  2020
    7    d     72  2019


    如果不設置 ignore_index = True,執行結果如下:(注意第一列有重復)

    $ python test2.py
      name  value  date
    0    a     11  2017
    1    b     20  2018
    2    c     31  2018
    3    d     42  2017
    0    a     31  2019
    1    b     40  2020
    2    c     51  2020
    3    d     72  2019


列操作

列操作我用到的場景,有一個是橫向統計各個列的合計和平均值。 示例如下:

# -*- coding: utf-8 -*-

import pandas as pd

test_data_01 = {
    "a": [11, 20],
    "b": [1, 2],
}


def main():
    df = pd.DataFrame(test_data_01)

    df["a+b"] = df["a"] + df["b"]
    df["(a+b)/2"] = (df["a"] + df["b"]) / 2
    print(df)


if __name__ == "__main__":
    main()

運行結果如下:

$ python test2.py
    a  b  a+b  (a+b)/2
0  11  1   12      6.0
1  20  2   22     11.0

還有就是進行數據集的列合并,比如將多個數據集的統計結果進行合并:

# -*- coding: utf-8 -*-

import pandas as pd

test_data_01 = {
    "a": [11, 20],
    "b": [1, 2],
}

test_data_02 = {
    "c": [18, 50],
    "d": [31, 32],
}


def main():
    df01 = pd.DataFrame(test_data_01)
    df02 = pd.DataFrame(test_data_02)

    df01["a+b"] = df01["a"] + df01["b"]
    df01["(a+b)/2"] = (df01["a"] + df01["b"]) / 2
    df01 = df01.drop(columns=["a", "b"])

    df02["c+d"] = df02["c"] + df02["d"]
    df02["(c+d)/2"] = (df02["c"] + df02["d"]) / 2
    df02 = df02.drop(columns=["c", "d"])

    df = pd.concat([df01, df02], axis=1)
    print(df)


if __name__ == "__main__":
    main()

運行結果如下:

$ python test2.py
   a+b  (a+b)/2  c+d  (c+d)/2
0   12      6.0   49     24.5
1   22     11.0   82     41.0

行列互換

行列互換我一般是在做動態短視頻時使用的,把每個時間點一行數據(數據包含各個元素),變成每個元素在每個時間點一個數據。

開始時,數據類似:

date,a,b
2017,1,2
2018,2,3

轉換后變成:

key,date,value
a,2017,1
a,2018,2
b,2017,2
b,2018,3

轉換代碼:

# -*- coding: utf-8 -*-

import pandas as pd

test_data = {
    "date": ["2017", "2018"],
    "a": [1, 2],
    "b": [2, 3],
}


def main():
    df = pd.DataFrame(test_data)
    print("轉換前:>>>>>>")
    print(df)

    data = df.drop(columns=["date"])
    data = pd.melt(data)

    df_date = pd.concat([df["date"]] * 2, ignore_index=True)
    data = pd.concat([df_date, data], axis=1)
    print("\n轉換后:>>>>>>")
    print(data)


if __name__ == "__main__":
    main()

運行結果如下:

$ python test2.py
轉換前:>>>>>>
   date  a  b
0  2017  1  2
1  2018  2  3

轉換后:>>>>>>
   date variable  value
0  2017        a      1
1  2018        a      2
2  2017        b      2
3  2018        b      3

導出數據文件

導出文件很簡單,只要指定個路徑即可(注意,路徑不存在會報錯)。

data.to_csv("./test.csv")

導出時,如果不想導出每行數據的序號,加上 index=False

data.to_csv("./test.csv", index=False)

如果給標題行重新命名成易懂的中文名稱,設置 header 參數。

data.to_csv(
    "./test.csv",
    index=False,
    header=[
        "日期",
        "名稱",
        "時間(小時)",
    ],
)

總結

掌握了 pandas,感覺是多了一件隨便操作數據集的利器,能夠極大節省調整數據的時間。 而且,它的處理速度極快,我在自己的筆記本電腦上處理成千上萬條數據時基本都是瞬間完成,同樣的數據,我用 excel 來處理,會卡頓很多。

“python的pandas有哪些基本操作”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

呼玛县| 五莲县| 乌兰浩特市| 信宜市| 南充市| 合川市| 明水县| 伊宁县| 绥化市| 新竹县| 玉环县| 梁河县| 开化县| 华宁县| 马公市| 闽清县| 虞城县| 宜章县| 新野县| 武宣县| 景德镇市| 苗栗市| 南和县| 垣曲县| 固原市| 镇康县| 建水县| 鹰潭市| 苗栗县| 常宁市| 盖州市| 青海省| 道孚县| 龙口市| 千阳县| 日照市| 陆良县| 山东| 尤溪县| 景洪市| 襄垣县|