Pandas 是 Python 資料科學領域不可或缺的工具,提供 DataFrame 和 Series 等高效的資料結構。本文將介紹如何運用 Pandas 進行資料處理、分析與視覺化。首先,我們會探討如何建立 DataFrame 和 Series,並學習如何使用索引、標籤和切片等技巧來操作資料。接著,我們將深入研究資料的運算,包括算術運算、統計運算和邏輯運算等。此外,我們還會介紹如何使用 Pandas 處理缺失值、重複值和異常值。最後,我們將示範如何使用 Pandas 內建的視覺化工具來繪製圖表,並展示如何將 Pandas 與其他 Python 資料科學函式庫(例如 Matplotlib 和 Seaborn)結合使用,以進行更進階的資料視覺化。
名稱與金額對應關係分析
在給定的資料中,我們觀察到了一系列名稱與其對應的金額。這些資料似乎是無序的,沒有明顯的排序或分類別依據。然而,透過仔細分析,我們可以嘗試找出一些潛在的模式或關係。
名稱與金額的直接對應
從給定的資料中,我們可以看到每個名稱都有一個對應的金額。例如,“Tes Qry” 對應著 108000,而 “Big John” 則對應著 109000。這種直接對應關係可能意味著這些名稱代表著某種實體或個體,而金額則代表著與這些實體相關的某種數值屬性。
金額的範圍和分佈
觀察金額的範圍和分佈,可以發現金額從 108000 到 400000 不等,跨度相當大。這可能意味著這些金額代表著不同層次或類別的數值,或者它們是根據不同的標準或公式計算出來的。
名稱的模式
雖然名稱看起來是隨機的,但仍有一些值得注意的模式。例如,有多個名稱包含 “John”,如 “John Deo”、“John Mike”、“Alex John” 和 “My John Rob”。這可能意味著 “John” 是一個特殊的字首或字尾,具有某種意義或重要性。
多維度分析(ndim: 2)
給定的 ndim: 2
表示這些資料可能存在於二維空間中。這可能意味著每個名稱和其對應的金額都可以被視為二維坐標系中的一個點。然而,沒有更多的資訊,我們無法確定這個二維空間的具體意義或如何將這些資料對映到這個空間中。
內容解密:
上述分析過程中,我們嘗試從不同的角度理解給定的資料,包括直接對應關係、金額範圍和分佈、名稱模式以及多維度分析。透過這些步驟,我們可以更深入地瞭解資料的結構和潛在意義。
graph LR A[名稱] -->|對應|> B[金額] B -->|範圍|> C[108000 - 400000] A -->|模式|> D[John 字首/字尾] C -->|分佈|> E[不同層次/類別] D -->|特殊意義|> F[重要性]
圖表翻譯:
此Mermaid圖表展示了名稱、金額及其之間關係的視覺化表示。它闡明瞭名稱與金額的一一對應關係、金額的範圍和分佈,以及名稱中 “John” 的特殊模式。這個圖表有助於我們更好地理解資料的結構和潛在意義。
處理缺失值和基本算術運算
在資料分析中,缺失值是常見的問題。Pandas提供了fillna
方法來填充缺失值。下面的例子展示瞭如何使用fillna
方法填充缺失值。
import pandas as pd
# 讀取CSV檔案並選擇'Employee Name'和'Salary'欄位
df = pd.read_csv('employees_salary2.csv', usecols=['Employee Name', 'Salary'])
print(df)
# 將'Salary'欄位中的缺失值填充為12345
df['Salary'] = df['Salary'].fillna(12345)
# 將DataFrame轉換為Series物件,以'Employee Name'為索引
series = df.set_index('Employee Name')['Salary']
# 顯示結果
print(series)
print(type(series))
輸出結果如下:
Employee Name Salary
0 John Deo 100000.0
1 Donald NaN
2 Recky 400000.0
Employee Name
John Deo 100000.0
Donald 12345.0
Recky 400000.0
Name: Salary, dtype: float64
如果需要從Series物件中刪除缺失值,可以使用dropna
方法。例如:
series = series.dropna()
或者,可以使用inplace=True
引數直接修改原有的Series物件:
series.dropna(inplace=True)
基本算術運算可以在Series物件上進行。例如,可以對Series物件進行加、減、乘、除等運算。下面的例子展示瞭如何進行基本算術運算:
import pandas as pd
import numpy as np
# 建立一個Series物件
series = pd.Series([20, pd.NA, np.NaN, 25, None])
# 對Series物件進行加法運算
result = series + 10
print(result)
在上面的例子中,對Series物件進行加法運算時,會將10新增到每個元素上。如果元素為NaN,則結果也為NaN。
當進行兩個Series物件之間的算術運算時,只有索引匹配的元素才會進行運算。例如:
series1 = pd.Series([20, 30, 40], index=['a', 'b', 'c'])
series2 = pd.Series([10, 20, 30], index=['b', 'c', 'd'])
result = series1 + series2
print(result)
在上面的例子中, 只有索引為’b’和’c’的元素才會進行加法運算,索引為’a’和’d’的元素會傳回NaN。
圖表翻譯:
flowchart TD A[讀取CSV檔案] --> B[選擇欄位] B --> C[填充缺失值] C --> D[轉換為Series物件] D --> E[進行算術運算] E --> F[顯示結果]
在上面的流程圖中,首先讀取CSV檔案,然後選擇需要的欄位。接著,填充缺失值,然後轉換為Series物件。最後,進行算術運算,並顯示結果。
資料操作:標量值與系列之間的運算
在資料分析中,能夠對資料進行基本的算術運算是非常重要的。這包括了標量值與資料系列之間的運算,以及資料系列之間的運算。
標量值與資料系列之間的運算
當我們將一個資料系列(如Pandas的Series物件)與一個標量值進行運算時,標量值會被廣播到資料系列的每一個元素上。這意味著,每一個元素都會與該標量值進行相同的運算。
import pandas as pd
# 建立一個資料系列
my_series = pd.Series(data=[1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
# 將資料系列乘以2
result = my_series * 2
print(result)
這將輸出每個元素乘以2的結果:
a 2
b 4
c 6
d 8
e 10
dtype: int64
資料系列之間的運算
當我們有兩個資料系列時,我們可以對這兩個系列進行元素-wise的運算。這意味著,兩個系列中對應索引的元素會進行相同的運算。
# 建立兩個資料系列
series1 = pd.Series(data=[1, 2, 3, 4, 5], index=['r', 's', 't', 'u', 'v'])
series2 = pd.Series(data=[6, 7, 8, 9, 10], index=['r', 's', 't', 'u', 'v'])
# 對兩個資料系列進行加法運算
result = series1 + series2
print(result)
這將輸出兩個系列中對應元素相加的結果:
r 7
s 9
t 11
u 13
v 15
dtype: int64
處理索引不匹配的情況
如果兩個資料系列的索引不完全匹配,則在進行運算時,Pandas會根據索引進行對齊。如果某個索引在一系列中存在但在另一系列中不存在,則結果中該索引對應的值將為NaN(Not a Number)。
# 建立兩個索引不完全匹配的資料系列
series3 = pd.Series(data=[1, 2, 3, 4, 5], index=['r', 's', 't', 'u', 'v'])
series4 = pd.Series(data=[6, 7, 8, 9, 10], index=['r', 's', 't', 'w', 'x'])
# 對兩個資料系列進行加法運算
result = series3 + series4
print(result)
這將輸出結果,其中索引不匹配的地方填充為NaN:
r 7.0
s 9.0
t 11.0
u NaN
v NaN
w NaN
x NaN
dtype: float64
圖表翻譯:
graph LR A[資料系列1] -->|加法運算|> B[結果] C[資料系列2] -->|加法運算|> B B --> D{索引匹配} D -->|是|> E[元素-wise加法] D -->|否|> F[結果為NaN]
內容解密:
以上程式碼示範瞭如何對Pandas中的Series物件進行基本的算術運算,包括標量值與資料系列之間的運算,以及資料系列之間的運算。同時,也展示瞭如何處理索引不匹配的情況,並使用Mermaid圖表來視覺化這個過程。
Pandas Series 的運算操作
Pandas Series 是一個一維的標籤陣列,能夠進行各種運算操作。這些操作包括基本的算術運算,如加法、減法、乘法和除法等。
基本運算操作
當進行Series之間的運算時,Pandas會根據索引(index)進行匹配。如果兩個Series的索引不完全匹配,則會根據索引進行對齊,缺失的值會被填充為NaN(Not a Number)。
以下是基本運算操作的示例:
import pandas as pd
import numpy as np
# 建立兩個Series
s1 = pd.Series([1, 2, 3, 4, 5, np.NaN], index=['r', 's', 't', 'u', 'v', 'y'])
s2 = pd.Series([6, 7, 8, 9, 10], index=['r', 's', 't', 'w', 'x'])
# 加法運算
print(s1.add(s2, fill_value=0))
輸出結果:
r 7.0
s 9.0
t 11.0
u 4.0
v 5.0
w 9.0
x 10.0
y NaN
dtype: float64
在上述範例中,add()
方法用於進行加法運算,fill_value=0
引數指定了當索引不匹配時,缺失的值應該被填充為0。
其他運算操作
Pandas Series還支援其他運算操作,如減法、乘法和除法等。以下是這些操作的對應方法:
- 加法:
add()
- 減法:
sub()
- 乘法:
mul()
- 除法:
div()
這些方法都可以使用fill_value
引數來指定當索引不匹配時,缺失的值應該被填充為什麼。
運運算元號對應
Pandas Series還支援使用運運算元號進行運算操作。以下是運運算元號與對應方法的對映:
+
→add()
-
→sub()
*
→mul()
這些運運算元號可以用於簡化運算操作的程式碼,使其更為直觀和易於閱讀。
系列物件轉換
根據玄貓的描述,系列物件轉換是指更新系列物件的值。讓我們來探討轉換的型別:
部分轉換
在部分轉換中,操作只會在系列或資料框架的子集上進行。這種操作可以使用 update()
方法來完成。非 NaN 值將從傳遞的系列中使用來更新原始系列,如下面的語法和程式碼示例所示:
import pandas as pd
# 建立一個系列物件
series = pd.Series([15, 30, 45, 60])
# 更新系列物件中的特定元素
series[1] = 25
series[2] = 55
print(series)
# 使用 update() 方法更新系列物件
series2 = pd.Series([15, 30, 45, 60])
series2.update(pd.Series([25, 55], index=[1, 2]))
print(series2)
完整轉換
在完整轉換中,操作將在整個系列或資料框架上進行。這種操作可以使用各種方法來完成,例如使用 map()
方法或使用向量化操作。
# 使用 map() 方法進行完整轉換
series3 = pd.Series([15, 30, 45, 60])
series3 = series3.map(lambda x: x * 2)
print(series3)
# 使用向量化操作進行完整轉換
series4 = pd.Series([15, 30, 45, 60])
series4 = series4 * 2
print(series4)
內容解密:
在上面的例子中,我們使用了 update()
方法來更新系列物件中的特定元素。這種方法可以用來更新系列物件中的任意元素。另外,我們也使用了 map()
方法和向量化操作來進行完整轉換。這些方法可以用來對整個系列或資料框架進行操作。
圖表翻譯:
flowchart TD A[系列物件] --> B[更新] B --> C[部分轉換] C --> D[完整轉換] D --> E[結果]
在這個圖表中,我們展示了系列物件轉換的流程。首先,我們建立一個系列物件,然後更新它的值。接下來,我們可以選擇進行部分轉換或完整轉換,最後得到結果。
全域轉換:使用 map()
方法
全域轉換是一種對整個系列或資料框架進行操作的方法。這可以使用 apply()
或 map()
方法來實作。在之前的章節中,我們已經學習了使用 apply()
方法對系列進行全域轉換。現在,我們將探討使用 map()
方法對系列進行全域轉換。
map()
方法的語法
map()
方法的語法如下:
map(arg: 'Callable | Mapping | Series', na_action: 'Literal['ignore'] | None' = None)
其中,arg
引數可以是一個可呼叫物件(Callable)、一個對映(Mapping)或一個系列(Series)。na_action
引數用於指定如何處理缺失值(NaN)。
使用 map()
方法進行全域轉換
下面的例子展示瞭如何使用 map()
方法對一個系列進行全域轉換:
import pandas as pd
import numpy as np
# 建立一個系列
series = pd.Series(['Green', 'Yellow', 'Blue', 'Violet'])
# 使用字典進行對映
new_series = series.map({'Green': 'Pink', 'Blue': 'Magenta'})
print(new_series)
輸出結果如下:
0 Pink
1 NaN
2 Magenta
3 NaN
dtype: object
如您所見,map()
方法將原系列中的值替換為字典中對應的值。如果原系列中的值在字典中沒有對應的值,則會被替換為 NaN。
使用 map()
方法進行全域轉換的優點
使用 map()
方法進行全域轉換有以下優點:
- 可以快速地對整個系列進行操作。
- 可以使用字典、系列或可呼叫物件進行對映。
- 可以指定如何處理缺失值(NaN)。
使用lambda函式和自定義函式進行對映
在Pandas中,map()
函式可以用於將一個Series中的每個元素應用到一個函式上。以下是使用lambda函式和自定義函式進行對映的示例:
使用lambda函式
首先,我們定義了一個Series my_series
,然後使用lambda函式將每個元素對映為一個字串。lambda函式的語法為 lambda x: f" I love {x} color "
,其中 x
是Series中的每個元素。
import pandas as pd
import numpy as np
my_series = pd.Series(['Pink', 'Yellow', 'Magenta', 'Violet'])
my_series_func = my_series.map(lambda x: f" I love {x} color ")
print(my_series_func)
使用自定義函式
接下來,我們定義了一個自定義函式 myfunc
,該函式將輸入的字串 x
轉換為 f'I love {x} color '
。然後,我們建立了一個新的Series my_series3
,其中包含一些NaN值。使用 map()
函式時,我們傳入 myfunc
作為對映函式,並設定 na_action='ignore'
以避免將NaN值應用到函式中。
def myfunc(x):
return f'I love {x} color '
my_series3 = pd.Series(['Green', 'Yellow', np.NaN, 'Violet'])
my_series_func2 = my_series3.map(myfunc, na_action='ignore')
print(my_series_func2)
在這兩個示例中,map()
函式都被用來將Series中的每個元素應用到一個函式上。使用lambda函式可以簡化程式碼,但自定義函式可以提供更多的控制和彈性。同時,na_action
引數可以用來控制如何處理NaN值。
資料轉換與操作
在資料分析中,轉換(transformations)是一個非常重要的步驟。轉換可以分為區域性轉換(partial transformations)和全域轉換(global transformations)。區域性轉換是指標對資料結構中的特定子集進行操作,而全域轉換則是對整個資料結構進行操作。
區域性轉換
區域性轉換通常用於修改資料結構中的特定部分。例如,當我們需要更新某些特定行或列的資料時,就會使用區域性轉換。下面的例子展示瞭如何使用 Pandas 進行區域性轉換:
import pandas as pd
# 建立一個 Series
series = pd.Series(['Green', 'Yellow', 'Blue', 'Violet'])
# 區域性轉換:修改第二個元素為 NaN
series.iloc[2] = pd.NA
print(series)
輸出結果:
0 Green
1 Yellow
2 NaN
3 Violet
dtype: object
全域轉換
全域轉換則是對整個資料結構進行操作。例如,當我們需要將整個 Series 中的所有元素轉換為大寫時,就會使用全域轉換。Pandas 提供了許多內建函式和方法來高效地執行這兩種型別的轉換,使其成為資料操作和分析的寶貴工具。
迭代 Series 元素
我們可以使用 items()
方法來迭代 Series 的元素,如下面的例子所示:
import pandas as pd
# 建立一個 Series
series = pd.Series(['Green', 'Yellow', 'Blue', 'Violet'])
# 迭代 Series 元素
for index, value in series.items():
print(f'{index} ---> {value}')
輸出結果:
0 ---> Green
1 ---> Yellow
2 ---> Blue
3 ---> Violet
這些方法和函式使得 Pandas 成為一個強大的工具,用於高效地操縱和分析資料。無論是區域性轉換還是全域轉換,Pandas 都提供了簡單而有效的方法來實作這些操作。
探索Pandas DataFrame:Python資料科學的基本
在前一章中,我們深入探討了Pandas Series的世界,為讀者提供了分析和操縱資料的強大工具。在這一章中,我們將繼續探索Pandas DataFrame的奧妙,學習如何使用這個強大的資料結構來處理和分析資料。
什麼是Pandas DataFrame?
Pandas DataFrame是一個二維的標籤資料結構,可以容納多種不同型別的資料。它類別似於電子試算表或SQL表格,能夠進行整列或整列的操作。Pandas DataFrame在處理結構化的表格資料時特別出色,能夠同時容納多個變數。
建立Pandas DataFrame
Pandas DataFrame可以從多種不同的資料來源建立,例如CSV檔案、Excel檔案、SQL資料函式庫等。以下是建立Pandas DataFrame的一些方法:
import pandas as pd
# 從CSV檔案建立DataFrame
df = pd.read_csv('data.csv')
# 從Excel檔案建立DataFrame
df = pd.read_excel('data.xlsx')
# 從SQL資料函式庫建立DataFrame
df = pd.read_sql_query('SELECT * FROM table', 'sqlite:///database.db')
資料探索和操縱
Pandas DataFrame提供了多種方法來探索和操縱資料,包括:
head()
和tail()
方法:用於檢視資料的前幾行或後幾行。info()
方法:用於檢視資料的摘要資訊。dtypes
屬性:用於檢視資料的型別。sum()
、mean()
、count()
等方法:用於進行資料的彙總操作。
以下是使用這些方法的範例:
# 檢視資料的前五行
print(df.head())
# 檢視資料的後五行
print(df.tail())
# 檢視資料的摘要資訊
print(df.info())
# 檢視資料的型別
print(df.dtypes)
# 對資料進行彙總操作
print(df.sum())
資料視覺化
Pandas DataFrame也提供了多種方法來視覺化資料,包括使用Matplotlib等圖表函式庫。以下是使用Matplotlib視覺化資料的範例:
import matplotlib.pyplot as plt
# 對資料進行視覺化
df.plot(kind='bar')
plt.show()
內容解密:
在上述程式碼中,我們使用了多種方法來建立和操縱Pandas DataFrame。其中,read_csv()
和read_excel()
方法用於從CSV檔案和Excel檔案中建立DataFrame,而read_sql_query()
方法用於從SQL資料函式庫中建立DataFrame。head()
和tail()
方法用於檢視資料的前幾行或後幾行,而info()
方法用於檢視資料的摘要資訊。dtypes
屬性用於檢視資料的型別,而sum()
、mean()
、count()
等方法用於進行資料的彙總操作。最後,使用Matplotlib等圖表函式庫來視覺化資料。
圖表翻譯:
以下是使用Mermaid語法繪製的流程圖,展示了建立和操縱Pandas DataFrame的過程:
flowchart TD A[建立DataFrame] --> B[探索資料] B --> C[操縱資料] C --> D[視覺化資料] D --> E[彙總操作] E --> F[結果輸出]
在這個流程圖中,我們可以看到建立DataFrame、探索資料、操縱資料、視覺化資料和彙總操作之間的關係。
資料處理技術
資料結構建立
在資料分析中,建立適當的資料結構是非常重要的。Pandas是一個強大的資料處理函式庫,它提供了多種方法來建立和操作資料結構。其中,Dataframe是Pandas中的一種重要資料結構,它可以用來儲存和操作二維資料。
資料操作方法
Pandas提供了多種方法來操作Dataframe,包括增加、刪除、修改和查詢資料。以下是一些常用的方法:
dropna()
: 刪除含有空值的資料列。fillna()
: 將空值替換為指定的值。sort_values()
: 對資料進行排序。loc[]
和iloc[]
: 用於查詢和修改資料。
資料運算
Pandas也提供了多種方法來進行資料運算,包括基本的算術運算和統計運算。以下是一些常用的方法:
+
、-
、*
、/
: 基本的算術運算。mean()
、median()
、std()
: 統計運算。
資料篩選
Pandas提供了多種方法來篩選資料,包括根據條件篩選和根據索引篩選。以下是一些常用的方法:
loc[]
: 根據索引篩選資料。query()
: 根據條件篩選資料。
資料去重
Pandas提供了多種方法來去除重複的資料,包括根據索引去重和根據值去重。以下是一些常用的方法:
drop_duplicates()
: 根據索引去除重複的資料。duplicated()
: 判斷資料是否重複。
資料唯一性檢查
Pandas提供了多種方法來檢查資料的唯一性,包括根據索引檢查和根據值檢查。以下是一些常用的方法:
unique()
: 取得資料的唯一值。nunique()
: 取得資料的唯一值數量。
內容解密:
以上所述的方法都是Pandas中非常重要的功能,它們可以用來建立、操作、篩選和去除重複的資料。透過這些方法,我們可以更有效地處理和分析資料。
import pandas as pd
# 建立一個Dataframe
data = {'Name': ['Tom', 'Nick', 'John'],
'Age': [20, 21, 19]}
df = pd.DataFrame(data)
# 刪除含有空值的資料列
df.dropna()
# 將空值替換為指定的值
df.fillna(0)
# 對資料進行排序
df.sort_values(by='Age')
# 篩選資料
df.loc[df['Age'] > 20]
# 去除重複的資料
df.drop_duplicates()
# 檢查資料的唯一性
df['Name'].unique()
圖表翻譯:
以下是使用Mermaid語法繪製的Dataframe操作流程圖:
flowchart TD A[建立Dataframe] --> B[操作Dataframe] B --> C[篩選資料] C --> D[去除重複的資料] D --> E[檢查資料的唯一性]
這個圖表展示了Dataframe操作的基本流程,從建立Dataframe開始,到操作Dataframe、篩選資料、去除重複的資料,最後檢查資料的唯一性。
瞭解 Pandas DataFrame
Pandas DataFrame 是一個強大的資料結構,能夠高效地儲存和操作大型資料集。它是一個二維的、可變的表格資料結構,具有標籤軸(行和列)。在本文中,我們將深入探討 Pandas DataFrame 的基本概念、建立方法、屬性和方法。
Pandas DataFrame 基本概念
Pandas DataFrame 是一個表格資料結構,類別似於 SQL 表格或電子試算表。它由三個主要部分組成:資料、行和列。資料可以是資料字典、資料列表、NumPy 陣列或其他 DataFrame 等。
Pandas DataFrame 建立方法
Pandas DataFrame 可以透過 pandas.DataFrame()
函式建立。這個函式接受多個引數,包括:
data
: 指定 DataFrame 的資料,可以是資料字典、資料列表、NumPy 陣列或其他 DataFrame 等。index
: 指定 DataFrame 的行標籤,可以是列表、陣列或其他 DataFrame 等。columns
: 指定 DataFrame 的列標籤,可以是列表、陣列或其他 DataFrame 等。dtype
: 指定 DataFrame 中的資料型別,可以是字典或單一資料型別。copy
: 指定是否複製資料,如果為True
,則建立一個新的資料複製。
Pandas DataFrame 建立範例
以下是建立 Pandas DataFrame 的範例:
import pandas as pd
# 建立一個字典
my_dict = {'姓名': ['Alex', 'John', 'Michael', 'Tom'],
'年齡': [35, 45, 55, 65],
'國家': ['UK', 'USA', 'Australia', 'Finland']}
# 建立一個 DataFrame
df = pd.DataFrame(my_dict)
print(df)
這個範例建立了一個包含三列(姓名、年齡、國家)和四行的 DataFrame。
從列表建立 DataFrame
以下是從列表建立 Pandas DataFrame 的範例:
import pandas as pd
# 建立一個列表
my_list = [{'姓名': 'Alex', '年齡': 35, '國家': 'UK'},
{'姓名': 'John', '年齡': 45, '國家': 'USA'},
{'姓名': 'Michael', '年齡': 55, '國家': 'Australia'},
{'姓名': 'Tom', '年齡': 65, '國家': 'Finland'}]
# 建立一個 DataFrame
df2 = pd.DataFrame(my_list)
print(df2)
這個範例建立了一個包含三列(姓名、年齡、國家)和四行的 DataFrame。
內容解密:
在上面的範例中,我們使用 pandas.DataFrame()
函式建立了兩個不同的 DataFrame。第一個範例使用字典建立了一個 DataFrame,第二個範例使用列表建立了一個 DataFrame。在這兩個範例中,我們都指定了資料、行標籤和列標籤。透過這些範例,我們可以瞭解到 Pandas DataFrame 的基本概念和建立方法。
圖表翻譯:
graph LR A[字典] -->|建立|> B[DataFrame] C[列表] -->|建立|> D[DataFrame] B -->|屬性|> E[行標籤] B -->|屬性|> F[列標籤] D -->|屬性|> G[行標籤] D -->|屬性|> H[列標籤]
這個圖表展示了建立 Pandas DataFrame 的過程,包括使用字典和列表建立 DataFrame,以及指定行標籤和列標籤。
建立DataFrame的多種方式
在上一節中,我們探討瞭如何使用NumPy陣列建立DataFrame。現在,我們將學習如何使用字典建立DataFrame。
從字典建立DataFrame
我們可以使用字典來建立DataFrame,每個鍵值對應於一個Series。下面是範例:
import pandas as pd
# 建立Series
my_name = pd.Series(['Alex', 'John', 'Michael', 'Tom'])
my_age = pd.Series([35, 45, 55, 65])
my_country = pd.Series(['UK', 'USA', 'Australia', 'Finland'])
# 建立DataFrame
my_dataframe = pd.DataFrame({
'name': my_name,
'age': my_age,
'country': my_country
})
print(my_dataframe)
輸出:
name age country
0 Alex 35 UK
1 John 45 USA
2 Michael 55 Australia
3 Tom 65 Finland
DataFrame的屬性
現在,我們可以檢視DataFrame的屬性,例如維度(ndim)和形狀(shape):
print(my_dataframe.ndim)
print(my_dataframe.shape)
輸出:
2
(4, 3)
這表示我們的DataFrame有2個維度,分別是行和列,且有4行和3列。
檢視DataFrame的結構
我們可以使用print
函式來檢視DataFrame的結構:
print(my_dataframe)
輸出:
name age country
0 Alex 35 UK
1 John 45 USA
2 Michael 55 Australia
3 Tom 65 Finland
這樣,我們就可以清楚地看到DataFrame的結構和內容。
圖表翻譯:
graph LR A[建立Series] --> B[建立DataFrame] B --> C[檢視DataFrame結構] C --> D[檢視DataFrame屬性]
在這個圖表中,我們展示了建立DataFrame的過程,從建立Series到建立DataFrame,然後檢視DataFrame的結構和屬性。
Pandas 中的 DataFrame 和 Series
Pandas 是一個強大的 Python 函式庫,提供了高效的資料結構和資料分析工具。其中,DataFrame 和 Series 是兩個最重要的資料結構。
建立 DataFrame
DataFrame 可以從多種資料來源建立,例如字典、列表、numpy 陣列等。下面是一個例子:
import pandas as pd
data = {'name': ['Alex', 'John', 'Michael', 'Tom'],
'age': [35, 45, 55, 65],
'country': ['UK', 'USA', 'Australia', 'Finland']}
df = pd.DataFrame(data)
print(df)
輸出:
name age country
0 Alex 35 UK
1 John 45 USA
2 Michael 55 Australia
3 Tom 65 Finland
DataFrame 的屬性和方法
DataFrame 有許多有用的屬性和方法,例如:
dtypes
屬性:傳回每個列的資料型別。columns
屬性:傳回列標籤。axes
屬性:傳回 DataFrame 的軸(行和列)。head()
方法:傳回前幾行資料。tail()
方法:傳回後幾行資料。value_counts()
方法:傳回每個值的計數。
Series
Series 是一個一維的資料結構,類別似於列表,但具有更多的功能。Series 可以從多種資料來源建立,例如字典、列表、numpy 陣列等。
建立 Series
Series 可以從多種資料來源建立,例如:
import pandas as pd
data = [1, 2, 3, 4, 5]
s = pd.Series(data)
print(s)
輸出:
0 1
1 2
2 3
3 4
4 5
dtype: int64
Series 的屬性和方法
Series 有許多有用的屬性和方法,例如:
dtype
屬性:傳回 Series 的資料型別。index
屬性:傳回 Series 的索引。values
屬性:傳回 Series 的值。head()
方法:傳回前幾個值。tail()
方法:傳回後幾個值。
比較 DataFrame 和 Series
DataFrame 和 Series 都是 Pandas 中的重要資料結構,但它們有不同的特點和用途。DataFrame 是一個二維的資料結構,適合於儲存和分析表格資料,而 Series 是一個一維的資料結構,適合於儲存和分析序列資料。
圖表翻譯:
graph LR A[DataFrame] -->|二維|> B[表格資料] A -->|多列|> C[Series] C -->|一維|> D[序列資料]
在這個圖表中,我們可以看到 DataFrame 和 Series 的關係。DataFrame 是一個二維的資料結構,包含多列,而 Series 是一個一維的資料結構,適合於儲存和分析序列資料。
從資料探勘、缺失值處理、算術運算到 Pandas Series 與 DataFrame 的操作,本文涵蓋了資料處理的關鍵環節。觀察資料科學領域的發展趨勢,高效的資料清洗和預處理技術將越發重要。對於資料科學家而言,精通 Pandas 等工具,並掌握向量化運算、lambda 函式以及自定義函式的應用,才能在海量資料中挖掘出真正的價值。玄貓認為,持續學習新的資料處理技術,並將其與實際業務場景結合,是提升資料分析能力的關鍵。