Pandas数据选择和操作
Pandas是一个Python库,用于数据分析和操作,提供了丰富的功能来选择、过滤、添加、删除和修改数据。
1 选择列和行
Pandas 提供了多种方式来选择行和列,这取决于您希望获取的数据的类型和结构。
1.1 选择列
(1)使用列标签
使用列标签来选择一个或多个列。您可以将列标签传递给 DataFrame 的索引器,例如 []
。
(2)使用 .loc[]
方法
.loc[]
方法可以根据标签名称选择行和列。对于列选择,可以使用 :
选择所有行。
1.2 选择行
(1)使用行索引
使用行索引来选择一个或多个行。您可以使用 .loc[]
方法或 .iloc[]
方法。
(2)使用 .iloc[]
方法
.iloc[]
方法使用整数位置来选择行和列。它与 .loc[]
方法的不同之处在于,它使用整数索引而不是标签。
示例代码:
import pandas as pd data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]} df = pd.DataFrame(data) # 选择单个列 column_A = df['A'] print("单个列 'A':\n", column_A) # 结果: # 单个列 'A': # 0 1 # 1 2 # 2 3 # Name: A, dtype: int64 # 选择多个列 columns_AB = df[['A', 'B']] print("多个列 'A' 和 'B':\n", columns_AB) # 结果: # 多个列 'A' 和 'B': # A B # 0 1 4 # 1 2 5 # 2 3 6 # 使用 .loc[] 选择列 column_A_loc = df.loc[:, 'A'] print("使用 .loc[] 选择列 'A':\n", column_A_loc) # 结果: # 使用 .loc[] 选择列 'A': # 0 1 # 1 2 # 2 3 # Name: A, dtype: int64 # 选择多个列 columns_AB_loc = df.loc[:, ['A', 'B']] print("使用 .loc[] 选择多个列 'A' 和 'B':\n", columns_AB_loc) # 结果: # 使用 .loc[] 选择多个列 'A' 和 'B': # A B # 0 1 4 # 1 2 5 # 2 3 6 # 使用 .loc[] 选择单个行 row_0_loc = df.loc[0] print("使用 .loc[] 选择单个行 (索引 0):\n", row_0_loc) # 结果: # 使用 .loc[] 选择单个行 (索引 0): # A 1 # B 4 # C 7 # Name: 0, dtype: int64 # 使用 .loc[] 选择多个行 rows_01_loc = df.loc[0:1] print("使用 .loc[] 选择多个行 (索引 0 到 1):\n", rows_01_loc) # 结果: # 使用 .loc[] 选择多个行 (索引 0 到 1): # A B C # 0 1 4 7 # 1 2 5 8 # 使用 .iloc[] 选择单个行 row_0_iloc = df.iloc[0] print("使用 .iloc[] 选择单个行 (整数位置 0):\n", row_0_iloc) # 结果: # 使用 .iloc[] 选择单个行 (整数位置 0): # A 1 # B 4 # C 7 # Name: 0, dtype: int64 # 使用 .iloc[] 选择多个行 rows_01_iloc = df.iloc[0:2] print("使用 .iloc[] 选择多个行 (整数位置 0 到 1):\n", rows_01_iloc) # 结果: # 使用 .iloc[] 选择多个行 (整数位置 0 到 1): # A B C # 0 1 4 7 # 1 2 5 8 # 混合选择行和列 subset = df.loc[0:1, ['A', 'B']] print("选择特定的行和列:\n", subset) # 结果: # 选择特定的行和列: # A B # 0 1 4 # 1 2 5
2 过滤数据
在Pandas中,您可以使用不同的方法来过滤数据,根据特定条件筛选出满足条件的数据。以下是一些过滤数据的示例和方法:
2.1 基于条件的过滤
通过创建一个条件表达式,您可以选择DataFrame中满足条件的行。
import pandas as pd data = {'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50]} df = pd.DataFrame(data) # 选择满足条件的行,例如 'A' 列大于 3 的行 filtered_data = df[df['A'] > 3] print(filtered_data)
输出结果:
A B 3 4 40 4 5 50
2.2 使用多个条件
您可以组合多个条件,使用 &
(与)和 |
(或)等逻辑运算符。
# 选择同时满足多个条件的行,例如 'A' 列大于 2 且 'B' 列小于 30 的行 filtered_data = df[(df['A'] > 2) & (df['B'] < 30)] print(filtered_data)
输出结果:
A B 2 3 30
2.3 使用 isin()
进行筛选
您可以使用 isin()
方法来筛选出匹配指定值的行。
# 选择 'A' 列中匹配特定值的行 filtered_data = df[df['A'].isin([2, 4])] print(filtered_data)
输出结果:
A B 1 2 20 3 4 40
2.4 使用字符串方法
如果您的数据包含字符串列,您可以使用字符串方法进行过滤。
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'], 'Age': [25, 30, 35, 40]} df = pd.DataFrame(data) # 选择包含特定字符串的行 filtered_data = df[df['Name'].str.contains('b', case=False)] print(filtered_data)
输出结果:
Name Age 1 Bob 30
3 添加、删除和修改数据
3.1 添加数据
(1)添加行
要向 DataFrame 添加新行,通常可以创建一个新的数据项,然后将其附加到 DataFrame。这可以使用 append
方法来完成。确保设置 ignore_index=True
来重置索引。
(2)添加列
要添加新列,只需分配一个新的列名并提供相应的数据。这样可以在 DataFrame 中增加新的列,以便存储额外的信息。
3.2 删除数据
(1)删除行
使用 drop
方法可以删除指定的行。您可以指定要删除的行的索引或标签,并使用 axis=0
参数来表示删除行。
(2)删除列
要删除列,使用 drop
方法并设置 axis=1
参数,然后指定要删除的列名。这将允许您从 DataFrame 中移除不需要的列。
3.3 修改数据
(1)修改特定单元格的值
要修改 DataFrame 中特定单元格的值,您可以使用 .loc[]
方法,通过指定行和列的标签或索引,来更新该单元格的值。
.
(2)更新多个值
要批量更新数据,通常可以使用条件来选择要更新的行,然后赋予新的值。这可以帮助您一次性更新多个数据点,而不必一个一个手动修改。
3.4 代码示例
import pandas as pd # 创建一个示例 DataFrame data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35]} df = pd.DataFrame(data) # 添加新行 new_row = pd.Series({'Name': 'David', 'Age': 40}) df = df.append(new_row, ignore_index=True) # 结果: # Name Age # 0 Alice 25 # 1 Bob 30 # 2 Charlie 35 # 3 David 40 # 添加新列 df['City'] = ['New York', 'Los Angeles', 'Chicago', 'Houston'] # 结果: # Name Age City # 0 Alice 25 New York # 1 Bob 30 Los Angeles # 2 Charlie 35 Chicago # 3 David 40 Houston # 删除行 df = df.drop(2) # 删除索引为2的行 # 结果: # Name Age City # 0 Alice 25 New York # 1 Bob 30 Los Angeles # 3 David 40 Houston # 删除列 df = df.drop('City', axis=1) # 删除名为 'City' 的列 # 结果: # Name Age # 0 Alice 25 # 1 Bob 30 # 3 David 40 # 修改特定单元格的值 df.loc[1, 'Age'] = 31 # 结果: # Name Age # 0 Alice 25 # 1 Bob 31 # 3 David 40 # 更新多个值 df.loc[df['Age'] > 30, 'Age'] = 32 # 更新年龄大于30的行的年龄为32 # 结果: # Name Age # 0 Alice 25 # 1 Bob 32 # 3 David 32 # 输出最终结果 print(df)
4 数据排序
在 Pandas 中,您可以使用 sort_values()
方法对 DataFrame 中的数据进行排序。以下是有关如何进行列排序、包括升序和降序排序,以及如何按多列进行排序。
4.1 按列排序:
要按列对数据进行排序,首先选择要排序的列名称,并使用 sort_values()
方法进行操作。默认情况下,数据将按升序排序。
- 升序排序:使用
sort_values(by='列名')
,其中 '列名' 是您要排序的列的名称。例如,df.sort_values(by='Age')
将按 'Age' 列的升序进行排序。 - 降序排序:要按降序排序,可以使用
sort_values(by='列名', ascending=False)
,其中 '列名' 是您要排序的列的名称。例如,df.sort_values(by='Age', ascending=False)
将按 'Age' 列的降序进行排序。
4.2 按多列排序:
如果需要按多列进行排序,您可以通过提供列名称的列表来实现。首先,按列表中的第一个列名进行排序,然后按照列表中的下一个列名进行排序。
例如,要按 'City' 列升序排序,然后按 'Age' 列升序排序,您可以使用 sort_values(by=['City', 'Age'])。
4.3 重置索引:
请注意,排序后的 DataFrame 可能会保留之前的索引顺序。如果希望重新设置索引以匹配新的排序顺序,可以使用
reset_index(drop=True)
方法来删除旧的索引并创建一个新的整数索引。
4.4 代码示例
import pandas as pd # 创建一个示例 DataFrame data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'], 'Age': [25, 30, 35, 40], 'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']} df = pd.DataFrame(data) # 按列排序 # 默认按升序排序 df_sorted = df.sort_values(by='Age') # 按照 'Age' 列的升序排序 print("按 'Age' 列的升序排序:\n", df_sorted) # 按照 'Age' 列的降序排序 df_sorted_desc = df.sort_values(by='Age', ascending=False) print("\n按 'Age' 列的降序排序:\n", df_sorted_desc) # 按多列排序 # 先按 'City' 列升序排序,再按 'Age' 列升序排序 df_multi_sorted = df.sort_values(by=['City', 'Age']) print("\n按 'City' 列和 'Age' 列的升序排序:\n", df_multi_sorted) # 恢复索引 df_multi_sorted = df_multi_sorted.reset_index(drop=True) print("\n重置索引后的 DataFrame:\n", df_multi_sorted)
这个示例演示了如何在 Pandas 中按列对数据进行排序,包括升序和降序排序以及按多列排序。您还可以使用 reset_index()
方法来重置排序后的 DataFrame 的索引。