获取DateFrame中数据的方式

本文深入探讨了Pandas库中用于数据选择和索引的三种核心方法:loc、iloc和ix。详细解释了每种方法的工作原理、使用场景及它们之间的区别,为数据分析师和数据科学家提供了宝贵的实践指南。
<think>我们被要求使用pandas获取DataFrame中的数据。根据用户的问题,他想要知道如何从DataFrame中提取数据。我们可以从以下几个方面来回答:1.选择列2.选择行3.选择特定的单元格(行和列的交点)4.使用条件选择(布尔索引)5.使用索引标签选择(loc)和位置索引选择(iloc)6.使用查询表达式(query)我们将结合引用中的信息,并给出示例代码。引用[4]提到了如何获取DataFrame的行名(index索引),引用[3]展示了如何获取重复行,引用[2]介绍了DataFrame的特点,引用[1]则指向了pandas的官方文档。下面我们将详细说明各种数据提取方法:</think>### Pandas DataFrame 数据提取方法详解 Pandas 提供了多种灵活的方式DataFrame 中提取数据,以下是常用的数据提取方法: #### 1. 列数据提取 ```python # 获取单列数据(返回Series) name_series = df['Name'] # 获取多列数据(返回DataFrame) subset = df[['Name', 'Age']] # 使用点号获取列(仅限列名无空格) age_series = df.Age ``` #### 2. 行数据提取 ```python # 通过位置索引获取行 row_2 = df.iloc[1] # 获取第2行(索引从0开始) # 通过标签索引获取行 row_beijing = df.loc['北京'] # 获取行名为"北京"的行 # 切片获取连续行 first_3_rows = df.iloc[0:3] # 获取前3行 ``` #### 3. 单元格数据提取 ```python # 获取单个单元格的值(行索引+列名) john_age = df.at[0, 'Age'] # 第1行'Age'列的值 # 获取单个单元格的值(行位置+列位置) first_cell = df.iat[0, 0] # 第1行第1列的值 ``` #### 4. 条件筛选(布尔索引) ```python # 获取年龄大于25的所有行 adults = df[df['Age'] > 25] # 组合条件筛选(使用&代替and) ny_adults = df[(df['City'] == 'New York') & (df['Age'] > 25)] # 使用query方法 paris_residents = df.query("City == 'Paris'") ``` #### 5. 索引操作 ```python # 获取行索引列表 index_names = df.index.tolist() # 如 ['北京', '天津', ...] # 获取列名列表 column_names = df.columns.tolist() # 如 ['Name', 'Age', 'City'] # 重置索引 df_reset = df.reset_index() ``` #### 6. 重复数据处理 ```python # 获取所有重复行(基于所有列) duplicates = df[df.duplicated(keep=False)] # 获取特定列重复的行 name_duplicates = df[df.duplicated(subset=['Name'], keep=False)] ``` #### 7. 数据类型转换 ```python # 转换为NumPy数组 numpy_array = df.values # 转换为Python字典 data_dict = df.to_dict(orient='records') ``` #### 8. 迭代访问 ```python # 按行迭代 for index, row in df.iterrows(): print(f"{row['Name']} is {row['Age']} years old") # 按列迭代 for column_name, column_data in df.items(): print(f"Column {column_name} has {len(column_data)} values") ``` #### 示例应用 ```python import pandas as pd # 创建示例DataFrame data = { '城市': ['北京', '上海', '广州', '北京', '深圳'], '人口(万)': [2154, 2487, 1874, 2154, 1756], 'GDP(亿元)': [40269, 43214, 28232, 40269, 30665] } df = pd.DataFrame(data) # 1. 获取北京的数据 beijing_data = df[df['城市'] == '北京'] # 2. 获取GDP前3的城市 top_gdp = df.nlargest(3, 'GDP(亿元)') # 3. 获取重复行(基于所有列) duplicates = df[df.duplicated(keep=False)] print("北京数据:\n", beijing_data) print("\nGDP前三城市:\n", top_gdp) print("\n重复行:\n", duplicates) ``` #### 输出示例: ``` 北京数据: 城市 人口(万) GDP(亿元) 0 北京 2154 40269 3 北京 2154 40269 GDP前三城市: 城市 人口(万) GDP(亿元) 1 上海 2487 43214 0 北京 2154 40269 4 深圳 1756 30665 重复行: 城市 人口(万) GDP(亿元) 0 北京 2154 40269 3 北京 2154 40269 ``` #### 性能提示: - 对于大数据集,避免使用`iterrows()`,改用`itertuples()`提高性能 - 使用向量化操作代替循环(如`df['new_col'] = df['col1'] + df['col2']`) - 使用`loc`和`iloc`进行索引比链式索引更高效[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值