在数据处理和分析中,获取某一列的所有值是最基础也是最常用的操作之一。无论是使用 pandas 处理结构化数据,还是操作 CSV 文件、数据库查询结果,掌握高效获取列数据的方法都至关重要。本文将系统介绍 Python 中获取某一列所有值的各种方法,并通过实战示例帮助你深入理解每种方法的应用场景。
Pandas DataFrame 获取列数据
基础方法:使用方括号索引
最直观的方式是使用方括号索引来获取 DataFrame 的某一列:
import pandas as pd
# 创建示例 DataFrame
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 28],
'city': ['北京', '上海', '广州', '深圳'],
'salary': [8000, 12000, 15000, 10000]
})
# 方法1:使用方括号获取单列
names = df['name']
print(names)
# 输出:
# 0 Alice
# 1 Bob
# 2 Charlie
# 3 David
# Name: name, dtype: object
# 转换为列表
name_list = df['name'].tolist()
print(name_list)
# 输出:['Alice', 'Bob', 'Charlie', 'David']使用点号访问属性
当列名是有效的 Python 标识符时,可以使用点号访问:
# 方法2:使用点号访问(列名不能包含空格或特殊字符)
ages = df.age
print(ages.tolist())
# 输出:[25, 30, 35, 28]
# 注意:如果列名包含空格,这种方法会报错
# df.column name # 错误!使用 loc 和 iloc 索引器
loc 和 iloc 提供了更灵活的数据访问方式:
# 方法3:使用 loc 按标签获取
cities = df.loc[:, 'city'] # 获取所有行的 'city' 列
print(cities.tolist())
# 输出:['北京', '上海', '广州', '深圳']
# 方法4:使用 iloc 按位置获取
salaries = df.iloc[:, 3] # 获取第4列(索引从0开始)
print(salaries.tolist())
# 输出:[8000, 12000, 15000, 10000]
# 获取多列
selected_cols = df.loc[:, ['name', 'salary']]
print(selected_cols)获取列的唯一值
在实际应用中,经常需要获取列的唯一值:
# 添加重复数据
df_with_duplicates = pd.DataFrame({
'category': ['A', 'B', 'A', 'C', 'B', 'A'],
'value': [10, 20, 10, 30, 20, 15]
})
# 获取唯一值
unique_categories = df_with_duplicates['category'].unique()
print(unique_categories)
# 输出:['A' 'B' 'C']
# 获取唯一值并排序
sorted_unique = sorted(df_with_duplicates['category'].unique())
print(sorted_unique)
# 输出:['A', 'B', 'C']
# 获取值的频次
value_counts = df_with_duplicates['category'].value_counts()
print(value_counts)
# 输出:
# A 3
# B 2
# C 1处理 CSV 文件的列 数据
使用 csv 模块
Python 内置的 csv 模块提供了基础的 CSV 文件处理功能:
import csv
# 写入示例 CSV 文件
with open('data.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['产品', '价格', '库存'])
writer.writerow(['手机', 2999, 100])
writer.writerow(['电脑', 5999, 50])
writer.writerow(['平板', 1999, 200])
# 读取特定列
products = []
with open('data.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
products.append(row['