資料處理

兔兔求放过鸭發表於2024-07-18

資料處理:

主要利用的庫

import numpy as np
import pandas as pd

函式的使用:

1.讀取:

path = "路徑"
c = pd.read_csv(path,sep="")引數sep是資料的分割符號,如果不輸入在讀取csv檔案中將預設為“,”
返回的內容是屬於pandas庫的特殊資料型別DataFrame。
在讀取過程中,該函式會根據給出的資料自行判斷資料型別,如果匯入的資料型別並不是希望的資料型別,可以透過下面這個函式規定。如下,將column_name這一列的資料規定為int64型
df = pd.read_csv('example.csv', dtype={'column_name': 'int64'})

如果檔案沒有列名,我們也可以透過先構建一個
names列表儲存列名利用read中的names引數來新增列名。

df.rename(columns={'A': 'X', 'B': 'Y'})
其中字典的key值為原列名,value為修改後的列名。
df = pd.read_csv('example.csv',names=names)# 前一個names是引數名,後一個是具體引數。
需要特別注意的是,如果資料本身有列名,本身的列名會被擠去第二行,另外。names中的列名,會與實際的列名右對齊,也就是說,如果資料的列數大於names中名字的個數,左側的幾列資料會出現沒有新增列名的情況。

2.觀察資料

df 為已經讀取的資料

df.info() 檢視的資料為其中每列的資料型別,以及資料中的非空缺的數值數目。
# 輸出內容為資料的列名,每列資料的數量,資料型別# 不需要print也能夠輸出相應資訊。
df.describe() # 輸出的內容為每列的
        count: 非NA/非空值的數量。
        mean: 平均值(均值)。
        std: 標準差(標準偏差)。
        min: 最小值。
        25%: 第一四分位數(Q1),即資料集中最小的25%的資料的最大值。
        50%: 中位數(第二四分位數,Q2)。
        75%: 第三四分位數(Q3),即資料集中最大的25%的資料的最小值。
        max: 最大值。
# 如果要提取這些數字我們可以 a = df[列名].max()/mean()/std()
df.columns表示為df資料的列名 # 在處理資料時我們也可以透過
# df.columns = names # 來將列名替換成names中的資料,此時names中的列名量必須等於df中的列數。




指定觀察用iloc或者loc:



# iloc
# 獲取第一行的資料
row1 = df.iloc[0]
print(row1)

# 獲取第二列的資料
col2 = df.iloc[:, 1]
print(col2)

# 獲取第二行第二列的單個值
value = df.iloc[1, 1]
print(value)

# 獲取多個行和多個列的資料
selected = df.iloc[[0, 2], [0, 2]]
print(selected)



# loc
row1 = df.loc['row1']
print(row1)

# 獲取第二列的資料
col2 = df.loc[:, 'B']
print(col2)

# 獲取第二行第二列的單個值
value = df.loc['row2', 'B']
print(value)

# 獲取多個行和多個列的資料
selected = df.loc[['row1', 'row3'], ['A', 'C']]
print(selected)



3.資料清洗:

	# 在觀察資料之後,我們要清洗的內容包括缺失值,異常值。重複值
    處理缺失值的方法:我們可以將缺失值設定為一個不在資料中存在存在的數值,比如0,-1,也可以設定成bool型的False。
    對於異常值,我們可以根據常識挑選出這些異常值,比如說挑選挑選出網齡大於200歲的資料,或者年齡為負數的人。異常值的處理方式,如果即便刪除異常值所在行對最後結果產生影響不大的情況下,我們可以刪除異常值所在的一整行資料,比如你有幾萬個資料,其中的異常值只有一二十,那根據情況,我們可以選擇直接刪除這一行資料。-->這麼做就是直接抹去存在異常值的資料。在對最終結果影響不大的前提下,我們可以透過用正常值的平均值或者中位數來代替這個位置的資料 --> 如果這樣處理的話,程式的分析內容將減小異常值的影響,從而在這一行分析除了異常意外列的資料對結果的影響。
    處理重複值
    df.drop.duplicates("列名",keep="first")# 保留重複的第一個
    a = df[df[列名] > 100]
    此時a即為在df某一列中滿足該列數字大於100的所有的行,前提:此處的資料型別應為確切的整形。
    df[列名].isnull() 將返回該列名下資料為0的那一整行
    利用isnull可以區分出缺失值
    

4.資料處理

df = df.frop_duplicates(["x",'y'])# 找出xy兩列的組合方式
df.groupby(['x','y'])
df['體力'] = df['體力'].apply(lambda x:"high" if int(x) > 100 else 'low' if int(x) < 50 else 'mid')集體調整數字


5資料整理:

df = df.sort_values(by='列名',ascending=False).reset_index(drop=True) # ascending=False: 表示降序排序。如果設定為True,則表示升序排序。
# reset_index(): 會重置資料框的索引。預設情況下,重置索引會將舊索引新增為資料框的一個列。
# drop=True: 表示在重置索引時,不將舊索引新增為資料框的一個列。這樣可以避免資料框中出現重複的索引列。

未完待續!