目錄
前言
Pandas 是一個專門用于數(shù)據(jù)處理和分析的 Python 庫,它提供了眾多強大的數(shù)據(jù)結(jié)構(gòu)和函數(shù),幫助用戶更加輕松、高效地完成數(shù)據(jù)處理和分析任務(wù)。其中,DataFrame 數(shù)據(jù)類型是 Pandas 中非常重要的一種數(shù)據(jù)結(jié)構(gòu),可以方便地對二維表格數(shù)據(jù)進行操作、處理、統(tǒng)計和可視化等工作。
Pandas 中 DataFrame 的一些特點和優(yōu)勢,比如:
- 可以靈活處理不同類型的數(shù)據(jù),包括數(shù)字、文本、日期等等。
- 提供了許多強大的數(shù)據(jù)處理函數(shù),比如過濾、排序、聚合等操作。
- 方便進行數(shù)據(jù)可視化和統(tǒng)計分析,例如可視化不同變量之間的關(guān)系、計算各種統(tǒng)計量等。
- 易于與其他 Python 庫相集成使用,比如 NumPy、Matplotlib 等庫。
一、構(gòu)造函數(shù)(Constructor)
DataFrame([data, index, columns, dtype, copy]) #二維、大小可變、可能異構(gòu)的表格數(shù)據(jù)。
1. DataFrame
class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)[source]
pandas.DataFrame() 是用于創(chuàng)建 DataFrame 數(shù)據(jù)類型的類,其參數(shù)如下:
- data:要傳入 DataFrame 中的數(shù)據(jù),可以是多種形式,包括 Numpy 數(shù)組、dicts、series、DataFrame 等。
- index:DataFrame 的索引。行標簽可以是數(shù)字或字符串。如果沒有顯示指定索引,則會默認生成整數(shù) RangeIndex(0, 1, 2, …, n)索引。
- columns:DataFrame 的列標簽。必須提供列名。
- dtype:指定 DataFrame 中元素的類型,可以是 Numpy 類型或 Python 內(nèi)置類型,比如 float、int、str 等。只允許一個數(shù)據(jù)類型。
- copy:如果復(fù)制輸入數(shù)據(jù),可以選擇 True 或 False。
使用示例:
import pandas as pd
# 定義輸入數(shù)據(jù)
data = {'name': ['Tom', 'Jerry', 'Mike', 'Jack'],
'age': [24, 25, 22, 26],
'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen']}
# 定義索引
index = ['a', 'b', 'c', 'd']
# 定義列標簽
columns = ['name', 'age', 'city', 'salary']
# 定義元素類型
dtype = str
# 創(chuàng)建 DataFrame 對象
df = pd.DataFrame(data=data, index=index, columns=columns, dtype=dtype)
# 打印 DataFrame
print(df)
輸出結(jié)果:
name age city salary
a Tom 24 Beijing NaN
b Jerry 25 Shanghai NaN
c Mike 22 Guangzhou NaN
d Jack 26 Shenzhen NaN
在上面的代碼中,我們首先定義了一個字典 data,其中包括了我們要傳入到 DataFrame 中的數(shù)據(jù)。接著,我們定義了一個列表 index,用于指定自定義索引。然后,我們定義了一個列表 columns,用于指定列標簽,即每列的名稱。最后,我們定義了一個字符串 dtype,指定每列的數(shù)據(jù)類型。
通過這些參數(shù),我們調(diào)用 pandas.DataFrame() 方法,并將所有參數(shù)傳入,創(chuàng)建了一個自定義索引和列標簽的 DataFrame。最后,我們打印輸出了 DataFrame。
二、屬性和基礎(chǔ)數(shù)據(jù)(Attributes and underlying data)
DataFrame.index # DataFrame 的索引(行標簽)。
DataFrame.columns # DataFrame 的列標簽。
DataFrame.dtypes # 返回 DataFrame 中的數(shù)據(jù)類型。
DataFrame.info([verbose, buf, max_cols, ...]) # 打印 DataFrame 的簡明摘要。
DataFrame.select_dtypes([include, exclude]) # 根據(jù)列數(shù)據(jù)類型返回 DataFrame 列的子集。
DataFrame.values # 返回 DataFrame 的 Numpy 表示。
DataFrame.axes # 返回表示 DataFrame 軸的列表。
DataFrame.ndim # 返回一個表示軸數(shù)/數(shù)組維數(shù)的 int。
DataFrame.size # 返回一個 int 表示此對象中的元素數(shù)。
DataFrame.shape # 返回表示 DataFrame 維度的元組。
DataFrame.memory_usage([index, deep]) # 以字節(jié)為單位返回每列的內(nèi)存使用情況。
DataFrame.empty # 指示 Series/DataFrame 是否為空。
DataFrame.set_flags(*[, copy, ...]) # 返回具有更新標志的新對象。
1. DataFrame.index
DataFrame 的索引(行標簽)。
使用示例:
import pandas as pd
# 創(chuàng)建一個 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 27, 23, 31, 22],
'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
# 查看 DataFrame 的行索引
print("行索引:", df.index)
# 查看第一個行索引
print("第一個行索引:", df.index[0])
# 修改行索引
new_index = ['a', 'b', 'c', 'd', 'e']
df.index = new_index
print("修改后的行索引:", df.index)
輸出結(jié)果:
行索引: RangeIndex(start=0, stop=5, step=1)
第一個行索引: 0
修改后的行索引: Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
這里首先創(chuàng)建了一個包含姓名、年齡和性別信息的 DataFrame 對象,并使用 .index 獲取了該 DataFrame 的行索引。然后使用索引 [0] 獲取了第一個行索引,即 0。最后使用新的行索引列表將行索引進行了修改,并打印了新的行索引。
2. DataFrame.columns
DataFrame 的列標簽。
使用示例:
import pandas as pd
# 創(chuàng)建一個 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 27, 23, 31, 22],
'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
# 查看 DataFrame 的列名
print("列名:", df.columns)
# 查看第一個列名
print("第一個列名:", df.columns[0])
# 修改列名
new_columns = ['Name', 'Age', 'Gender']
df.columns = new_columns
print("修改后的列名:", df.columns)
輸出結(jié)果:
列名: Index(['name', 'age', 'gender'], dtype='object')
第一個列名: name
修改后的列名: Index(['Name', 'Age', 'Gender'], dtype='object')
這里首先創(chuàng)建了一個包含姓名、年齡和性別信息的 DataFrame 對象,并使用 .columns 獲取了該 DataFrame 的列名。然后使用索引 [0] 獲取了第一個列名,即 name。最后使用新的列名列表將列名進行了修改,并打印了新的列名。
3. DataFrame.dtypes
返回 DataFrame 中的數(shù)據(jù)類型。
使用示例:
import pandas as pd
# 創(chuàng)建一個 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 27, 23, 31, 22],
'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
# 查看 DataFrame 的數(shù)據(jù)類型
print("數(shù)據(jù)類型:\n", df.dtypes)
輸出結(jié)果:
數(shù)據(jù)類型:
name object
age int64
gender object
dtype: object
這里首先創(chuàng)建了一個包含姓名、年齡和性別信息的 DataFrame 對象,并使用 .dtypes 獲取了該 DataFrame 的各列數(shù)據(jù)類型??梢钥吹剑畁ame’ 和 ‘gender’ 列的數(shù)據(jù)類型為 object,而 ‘a(chǎn)ge’ 列的數(shù)據(jù)類型為 int64。
4. DataFrame.info([verbose, buf, max_cols, …])
DataFrame.info(verbose=None, buf=None, max_cols=None, memory_usage=None, show_counts=None)[source]
DataFrame.info() 方法用于打印 DataFrame 的基本信息(包括索引類型、列數(shù)、數(shù)據(jù)類型、內(nèi)存占用等)。
該方法的參數(shù)含義如下:
- verbose:控制輸出的詳細程度,為 True 時輸出更詳細的信息,為 False 時只輸出基本信息;
- buf:控制輸出到何處,默認為 None,表示輸出到標準輸出流;
- max_cols:設(shè)置輸出時最多顯示的列數(shù),默認為 None,表示顯示所有列;
- memory_usage:控制是否顯示內(nèi)存占用情況,默認為 None,表示自動判斷是否顯示內(nèi)存占用;
- show_counts:控制每列非空值的數(shù)量是否顯示,默認為 None,表示根據(jù) DataFrame 大小自動判斷是否顯示每列的非空值數(shù)量。
該方法返回 None。
使用示例:
import pandas as pd
# 創(chuàng)建一個 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 27, 23, 31, 22],
'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
# 查看 DataFrame 的基本信息
df.info()
輸出結(jié)果:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 5 non-null object
1 age 5 non-null int64
2 gender 5 non-null object
dtypes: int64(1), object(2)
memory usage: 248.0+ bytes
該輸出結(jié)果顯示了該 DataFrame 的基本信息,包括索引類型、列數(shù)、數(shù)據(jù)類型、非空值數(shù)量和內(nèi)存占用。
5. DataFrame.select_dtypes([include, exclude])
DataFrame.select_dtypes(include=None, exclude=None)
根據(jù)列數(shù)據(jù)類型返回 DataFrame 列的子集。
該方法的參數(shù) include 和 exclude 控制篩選的方式,具體含義如下:
- include:包含的數(shù)據(jù)類型或數(shù)據(jù)類型的列表,如果指定則選擇指定的數(shù)據(jù)類型,否則選擇所有數(shù)據(jù)類型;
- exclude:排除的數(shù)據(jù)類型或數(shù)據(jù)類型的列表,如果指定則不選擇指定的數(shù)據(jù)類型,否則選擇所有數(shù)據(jù)類型。
其中 include 和 exclude 可以同時指定。
使用示例:
import pandas as pd
# 創(chuàng)建一個 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 27, 23, 31, 22],
'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
# 選擇 string 類型的列
df_str = df.select_dtypes(include='object')
print(df_str)
# 排除 int 類型的列
df_ex = df.select_dtypes(exclude='int64')
print(df_ex)
輸出結(jié)果:
name gender
0 Alice F
1 Bob M
2 Charlie M
3 David M
4 Emily F
name gender
0 Alice F
1 Bob M
2 Charlie M
3 David M
4 Emily F
該示例代碼中首先創(chuàng)建了一個包含姓名、年齡和性別信息的 DataFrame 對象,然后分別根據(jù)數(shù)據(jù)類型選擇或排除列,并打印了篩選后的結(jié)果。可以看到,df_str 只包含 string 類型的列(即 ‘name’ 和 ‘gender’),而 df_ex 不包含 int64 類型的列(即 ‘a(chǎn)ge’)。
6. DataFrame.values
返回一個 NumPy 數(shù)組對象,數(shù)組的形狀為 (行數(shù), 列數(shù)),數(shù)據(jù)類型為 object。
通常情況下,我們不需要直接訪問該屬性,而是使用 Pandas 提供的各種方法對 DataFrame 進行操作。但是在一些特殊情況下(例如需要使用第三方庫或需要進行較為底層的操作),直接訪問 DataFrame.values 很有用。
需要注意的是,DataFrame.values 返回的是一個視圖(view),而不是副本(copy)。這意味著如果修改返回的 NumPy 數(shù)組,則會修改原始的 DataFrame 數(shù)據(jù)。因此,我們應(yīng)該盡量避免修改 DataFrame.values 的結(jié)果。
使用示例:
import pandas as pd
# 創(chuàng)建一個 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 27, 23, 31, 22],
'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
# 訪問 DataFrame.values 屬性
values = df.values
print(values)
輸出結(jié)果:
[['Alice' 25 'F']
['Bob' 27 'M']
['Charlie' 23 'M']
['David' 31 'M']
['Emily' 22 'F']]
該示例代碼中首先創(chuàng)建了一個包含姓名、年齡和性別信息的 DataFrame 對象,然后訪問 DataFrame.values 屬性,并打印了返回的 NumPy 數(shù)組的值。
7. DataFrame.axes
DataFrame.axes 是 pandas 中 DataFrame 對象的一個屬性。它返回一個元組,其中包含兩個對象,即行軸(row axis)標簽和列軸(column axis)標簽。這兩個對象都是 Index 類型的數(shù)組,用于表示 DataFrame 中的行和列的標簽。
具體來說,DataFrame.axes 返回的元組中第一個元素是行軸標簽數(shù)組,它是一個長度為行數(shù)的 Index 對象,包含了 DataFrame 中所有行的標簽。第二個元素是列軸標簽數(shù)組,它是一個長度為列數(shù)的 Index 對象,包含了 DataFrame 中所有列的標簽。
需要注意的是,Index 對象是 pandas 的一種數(shù)據(jù)結(jié)構(gòu),類似于 Python 中的列表,但具有更多的方法和屬性,例如可以使用 .tolist() 方法將其轉(zhuǎn)換為 Python 列表,或使用 .rename() 方法重命名其中的元素。
使用示例:
import pandas as pd
# 創(chuàng)建一個 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 27, 23, 31, 22],
'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
# 訪問 DataFrame.axes 屬性
axes = df.axes
print(axes)
print("行軸標簽:", axes[0].tolist())
print("列軸標簽:", axes[1].tolist())
輸出結(jié)果:
[RangeIndex(start=0, stop=5, step=1), Index(['name', 'age', 'gender'], dtype='object')]
行軸標簽: [0, 1, 2, 3, 4]
列軸標簽: ['name', 'age', 'gender']
在這個示例代碼中,首先創(chuàng)建了一個包含姓名、年齡和性別信息的 DataFrame 對象,然后訪問了 DataFrame.axes 屬性,并打印了返回的軸標簽數(shù)組??梢钥吹?,該屬性返回的是一個長度為 2 的元組(tuple)對象,其中第一個元素是行軸標簽,第二個元素是列軸標簽,兩個元素的類型都是 Index 對象,它們的元素數(shù)分別等于 DataFrame 對象的行數(shù)和列數(shù)。我們可以使用 .tolist() 方法將它們轉(zhuǎn)換為 Python 列表對象進行操作。
另外需要注意,DataFrame.axes 屬性不同于 DataFrame.index 和 DataFrame.columns 屬性,它返回的是所有軸標簽,而不是行標簽和列標簽。
8. DataFrame.ndim
返回 DataFrame 的維度數(shù)目。也就是說,它返回的是 DataFrame 中軸的數(shù)量。如果是Series, 返回 1。如果是 DataFrame, 返回 2 。
使用示例:
import pandas as pd
# 創(chuàng)建一個二維 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 27, 23, 31, 22],
'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
# 訪問 DataFrame.ndim 屬性
print(df.ndim)
輸出結(jié)果:
2
在這個示例中,首先創(chuàng)建了一個包含姓名、年齡和性別信息的 DataFrame 對象,然后訪問了 DataFrame.ndim 屬性,并打印了返回的值。由于該 DataFrame 對象為二維數(shù)組,因此其維度數(shù)目為 2,屬性返回值為 2。
需要注意的是,DataFrame.ndim 屬性的返回值只與 DataFrame 對象內(nèi)部的數(shù)據(jù)結(jié)構(gòu)有關(guān),而與其中的數(shù)據(jù)值無關(guān)。因此,即使 DataFrame 中包含空值或不一致的數(shù)據(jù)類型等情況,DataFrame.ndim 的值也不會受到影響。
9. DataFrame.size
返回的是一個整數(shù)值,表示 DataFrame 包含的元素數(shù)量。在二維的 DataFrame 對象中,包含的元素數(shù)量等于其行數(shù)與列數(shù)之積。
使用示例:
import pandas as pd
# 創(chuàng)建一個二維 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 27, 23, 31, 22],
'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
# 訪問 DataFrame.size 屬性
print(df.size)
輸出結(jié)果:
15
在這個示例中,首先創(chuàng)建了一個包含姓名、年齡和性別信息的 DataFrame 對象,然后訪問了 DataFrame.size 屬性,并打印了返回的值。由于該 DataFrame 對象中包含了 5 行和 3 列的數(shù)據(jù),因此其大小為 15,屬性返回值為 15。
需要注意的是,DataFrame.size 屬性返回的是整個 DataFrame 對象內(nèi)部的元素數(shù)量,不管它們是空值或有效的數(shù)據(jù)值。因此,即使 DataFrame 中包含空值或不一致的數(shù)據(jù)類型等情況,DataFrame.size 的值也會受到所有元素數(shù)量的影響。
10. DataFrame.shape
返回的是一個元組,包含兩個整數(shù)值,分別表示 DataFrame 的行數(shù)和列數(shù)。例如,對于一個包含 5 行、3 列數(shù)據(jù)的 DataFrame 對象,DataFrame.shape 的返回值將會是 (5, 3)。
使用示例:
import pandas as pd
# 創(chuàng)建一個 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 27, 23, 31, 22],
'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
# 訪問 DataFrame.shape 屬性
print(df.shape)
輸出結(jié)果:
(5, 3)
在這個示例中,首先創(chuàng)建了一個包含姓名、年齡和性別信息的 DataFrame 對象,然后訪問了 DataFrame.shape 屬性,并打印了返回的值。由于該 DataFrame 對象中包含了 5 行和 3 列的數(shù)據(jù),因此其形狀為 (5, 3),屬性返回值為 (5, 3) 的元組。
需要注意的是,DataFrame.shape 的返回值只與 DataFrame 對象內(nèi)部的數(shù)據(jù)結(jié)構(gòu)有關(guān),而與其中的數(shù)據(jù)值無關(guān)。因此,即使 DataFrame 中包含空值或不一致的數(shù)據(jù)類型等情況,DataFrame.shape 的值也不會受到影響。
11. DataFrame.memory_usage([index, deep])
DataFrame.memory_usage(index=True, deep=False)
以字節(jié)為單位返回每列的內(nèi)存使用情況。
DataFrame.memory_usage(index=True, deep=False) 方法接受兩個參數(shù):
- index: 一個布爾值,指示是否計算索引占用的內(nèi)存大小。默認為 True。
- deep: 一個布爾值,指示是否考慮每個元素的實際大?。ǘ侵羔槪?。如果設(shè)置為 True,則計算每個元素的實際空間大??;否則,只計算指針的大小。默認為 False。
其中,index 參數(shù)為可選參數(shù),用于指示是否計算索引所占用的內(nèi)存。如果該參數(shù)為 True,則會額外計算 DataFrame 的索引所占用的內(nèi)存大?。环駝t不計算。默認情況下,該參數(shù)為 True。
deep 參數(shù)也是可選參數(shù),用于指示是否考慮每個元素的實際大小(而非指針)。如果該參數(shù)為 True,則會計算每個元素的實際空間大小,包括各種數(shù)據(jù)類型的元素,例如字符串、浮點數(shù)以及布爾值等等。如果該參數(shù)為 False,則僅計算指針的大小。默認情況下,該參數(shù)為 False。
需要注意的是,對于不同的數(shù)據(jù)類型而言,它們占用的內(nèi)存大小是不同的。例如,整數(shù)、浮點數(shù)、字符串等不同類型的數(shù)據(jù),在占用內(nèi)存大小方面有著明顯的差異。因此,在使用 DataFrame.memory_usage() 方法時,需要特別注意數(shù)據(jù)類型的影響。此外,當數(shù)據(jù)量比較大或者需要精確計算內(nèi)存占用時,可以使用 deep=True 參數(shù)來更加準確地計算每個元素的實際空間大小。
使用示例:
import pandas as pd
# 創(chuàng)建一個 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 27, 23, 31, 22],
'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
# 計算每列占用內(nèi)存的大小
mem_usage = df.memory_usage(index=True, deep=False)
print(mem_usage)
輸出結(jié)果:
Index 128
name 40
age 40
gender 40
dtype: int64
在這個示例中,首先創(chuàng)建了一個包含姓名、年齡和性別信息的 DataFrame 對象,然后通過調(diào)用 DataFrame.memory_usage() 方法來計算每列占用內(nèi)存的大小。由于該 DataFrame 對象中包含 5 行和 3 列的數(shù)據(jù),因此返回了一個包含 4 個元素的 Series,分別表示索引、姓名、年齡和性別這 4 列所占用的內(nèi)存大小。
需要注意的是,DataFrame.memory_usage() 方法默認忽略了一些不占用實際空間的元素,例如索引和空值。如果想計算每個元素的實際空間大小,需要指定 deep=True 參數(shù)。同時,由于元素的存儲方式可能因數(shù)據(jù)類型而異,因此使用 deep=True 將會更加準確,但也會更加耗時。
12. DataFrame.empty
DataFrame.empty 是一個布爾值,用于判斷一個 DataFrame 是否為空。如果 DataFrame 為空,則返回 True;否則返回 False。
具體來說,當 DataFrame 對象不包含任何數(shù)據(jù)時,即行數(shù)和列數(shù)都為 0 時,DataFrame.empty 返回 True;否則返回 False。在實際應(yīng)用中,可以使用該屬性來檢查一個 DataFrame 是否為空,從而避免在處理空數(shù)據(jù)時出現(xiàn)異常。
使用示例:
import pandas as pd
# 創(chuàng)建一個空的 DataFrame
df1 = pd.DataFrame()
# 創(chuàng)建一個非空 DataFrame
df2 = pd.DataFrame({'col1': [1, 2, 3], 'col2': ['a', 'b', 'c']})
# 檢查是否為空
print(df1.empty)
print(df2.empty)
輸出結(jié)果:
True
False
在這個示例中,首先創(chuàng)建了兩個 DataFrame 對象,一個為空,另一個包含兩列數(shù)據(jù)。然后分別調(diào)用了它們的 empty 屬性來檢查是否為空。由于第一個 DataFrame 為空,因此返回值為 True;而第二個 DataFrame 不為空,因此返回值為 False。
需要注意的是,DataFrame.empty 返回的是一個布爾值,因此可以直接將其作為條件進行判斷。
例如,可以使用以下代碼來檢查某個 DataFrame 是否為空:
if df.empty:
print('DataFrame is empty')
else:
print('DataFrame is not empty')
在這個示例中,使用了 if 語句來檢查 df 是否為空。如果 df 為空,則打印“DataFrame is empty”;否則打印“DataFrame is not empty”。
13. DataFrame.set_flags(*[, copy, …])
DataFrame.set_flags(*, copy=False, allows_duplicate_labels=None)
用于設(shè)置 DataFrame 對象的一些標志位。它返回一個新的 DataFrame 對象,該對象與原對象的副本相同,但具有修改后的標志位。
該方法接受以下參數(shù):
- copy:一個布爾值,指示是否將 DataFrame 復(fù)制到內(nèi)存中。如果為 True,則將復(fù)制 DataFrame,否則不進行復(fù)制。默認為 False。
- allows_duplicate_labels:一個布爾值或字符串,指示是否允許 DataFrame 中含有相同的列名。如果為 True,則允許存在相同的列名;如果為 False,則不允許存在相同的列名;如果為字符串,則表示相同的列名必須屬于該字符串中的某個集合。默認為 None,即根據(jù) Pandas 版本自動判斷是否允許存在相同的列名。
需要注意的是,DataFrame.set_flags() 方法能夠設(shè)置的標志位可能會隨著 Pandas 版本的更新而發(fā)生變化。因此,建議在使用該方法時查看相應(yīng)的文檔或源代碼,以確保能夠正確設(shè)置標志位。
使用示例:
import pandas as pd
# 創(chuàng)建一個 DataFrame 對象
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# 設(shè)置標志位
df1 = df.set_flags(copy=True, allows_duplicate_labels=True)
# 打印新舊 DataFrame 對象的屬性
print(f"df: {df._data}\n{df.columns}\n")
print(f"df1: {df1._data}\n{df1.columns}\n")
# 修改新 DataFrame 對象
df1['A'] = [4, 5, 6]
df1['C'] = [7, 8, 9]
# 打印修改后的新 DataFrame 對象
print(df1)
輸出結(jié)果:
df: BlockManager
Items: Index(['A', 'B'], dtype='object')
Axis 1: RangeIndex(start=0, stop=3, step=1)
IntBlock: slice(0, 2, 1), 2 x 3, dtype: int64
Index(['A', 'B'], dtype='object')
df1: BlockManager
Items: Index(['A', 'B'], dtype='object')
Axis 1: RangeIndex(start=0, stop=3, step=1)
IntBlock: slice(0, 2, 1), 2 x 3, dtype: int64
Index(['A', 'B'], dtype='object')
A B C
0 4 4 7
1 5 5 8
2 6 6 9
在這個示例中,首先創(chuàng)建了一個 DataFrame 對象 df。然后調(diào)用 df.set_flags() 方法來設(shè)置標志位,將 copy 標志位設(shè)置為 True,并將 allows_duplicate_labels 標志位設(shè)置為 True。接著使用 df1._data 和 df1.columns 分別獲取新 DataFrame 對象的數(shù)據(jù)和列名,并打印出來以便比較??梢钥吹剑?DataFrame 對象與原對象的數(shù)據(jù)和列名相同,但是它們具有不同的內(nèi)存地址,即它們是不同的對象。最后,修改新 DataFrame 對象的數(shù)據(jù)和列名,并打印出來以確認修改結(jié)果。文章來源:http://www.zghlxwxcb.cn/news/detail-497302.html
需要注意的是,此處設(shè)置的 copy 標志位為 True,即會復(fù)制 DataFrame 對象。因此,在進行一些修改操作時,應(yīng)該基于新 DataFrame 對象而不是原 DataFrame 對象。否則可能會產(chǎn)生意外的副作用。文章來源地址http://www.zghlxwxcb.cn/news/detail-497302.html
到了這里,關(guān)于4.11 Pandas中的DataFrame數(shù)據(jù)類型API函數(shù)參考手冊(一) (Python)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!