Pandas DataFrame 行列数据提取全指南:iloc、loc、iat、at 用法详解
本文详细介绍Pandas中DataFrame的行列数据提取方法,涵盖按行、按列、按位置及按索引的多种操作。重点解析df.iloc()、df.loc()、df.iat()和df.at()函数的具体用法与区别,通过实例演示如何高效获取连续或不连续的数据块,帮助开发者掌握灵活的数据筛选技巧。
Pandas数据提取方法概述
在Pandas中,提取DataFrame数据的方式多样,包括按行(单行、连续多行、非连续多行)、按列(单列、连续多列、非连续多列)、提取部分不连续的行与列、按坐标位置、按字符索引以及按数据块(list)等方式。主要涉及的函数有df.iloc()、df.loc()、df.iat()、df.at()以及已逐渐弃用的df.ix()。
DataFrame构建与索引基础
构建DataFrame时,需明确指定columns和index,并可在此基础上修改或添加数据,进而提取行列索引信息。
data = {'省份': ['北京', '上海', '广州', '深圳'],
'年份': ['2017', '2018', '2019', '2020'],
'总人数': ['2200', '1900', '2170', '1890'],
'高考人数': ['6.3', '5.9', '6.0', '5.2']}
df = pd.DataFrame(data, columns=['省份', '年份', '总人数', '高考人数', '高数'],
index=['one', 'two', 'three', 'four'])
df['高数'] = ['90', '95', '92', '98']
print("行索引:{}".format(list(df.index)))
print("列索引:{}".format(list(df.columns)))
print(df.index[1:3])
print(df.columns[1])
print(df.columns[1:3])
print(df)
示例数据中,行索引为['one', 'two', 'three', 'four'],列索引为['省份', '年份', '总人数', '高考人数', '高数']。提取部分行索引可得Index(['two', 'three'], dtype='object'),提取特定列索引如'年份'可得Index(['年份', '总人数'], dtype='object')。完整数据表如下: 省份 年份 总人数 高考人数 高数 one 北京 2017 2200 6.3 90 two 上海 2018 1900 5.9 95 three 广州 2019 2170 6.0 92 four 深圳 2020 1890 5.2 98
按列索引提取数据的注意事项
需要注意的是,df.iloc()不支持通过[:, [1:3]]这种切片方式直接获取连续列数据。若需按位置获取连续列,必须先通过df.columns[1:4]获取列索引列表,再基于该索引提取数据。
print(df['省份']) #按列名取列
print(df.省份) #按列名取列
print(df[['省份', '总人数']]) #按列名取不连续列数据
print(df[df.columns[1:4]]) #按列索引取连续列数据
print(df.iloc[:, 1]) #按位置取列
print(df.iloc[:, [1, 3]]) #按位置取不连续列数据
以下是按列名或列索引提取数据的示例结果: 提取单列'省份': one 北京 two 上海 three 广州 four 深圳 Name: 省份, dtype: object 提取多列'省份'和'总人数': 省份 总人数 one 北京 2200 two 上海 1900 three 广州 2170 four 深圳 1890 提取连续列'年份'、'总人数'、'高考人数': 年份 总人数 高考人数 one 2017 2200 6.3 two 2018 1900 5.9 three 2019 2170 6.0 four 2020 1890 5.2 提取单列'年份': one 2017 two 2018 three 2019 four 2020 Name: 年份, dtype: object 提取非连续列'年份'和'高考人数': 年份 高考人数 one 2017 6.3 two 2018 5.9 three 2019 6.0 four 2020 5.2
使用iloc按位置提取数据
使用df.iloc[](传入数字)可提取行数据。当需要提取部分行和部分列时,参数顺序应先指定行,再指定列。此外,还可以结合条件语句进行数据筛选。
print(df[1:3]) #按行取数据,这行代码结果没在下面输出
print(df[df.高数>90]) #按行有条件的取数据,结果没输出
print(df.iloc[1]) #按行取行数据
print(df.iloc[1, 3]) #按坐标取
print(df.iloc[[1], [3]]) #按坐标取
print(df.loc[df.index[1:3]]) #按行索引取行,但没必要
print(df.iloc[1:3]) #按行取连续数据
print(df.iloc[[1, 3]]) 按行取不连续数据
print(df.iloc[[1,2,3], [2,4]]) 取部分行部分列数据
以下是按位置提取数据的示例结果: 提取单行'two': 省份 上海 年份 2018 总人数 1900 高考人数 5.9 高数 95 Name: two, dtype: object 提取单个元素: 5.9 提取单列'高考人数': 高考人数 two 5.9 提取多行'two'和'three': 省份 年份 总人数 高考人数 高数 two 上海 2018 1900 5.9 95 three 广州 2019 2170 6.0 92 提取多行'two'和'four': 省份 年份 总人数 高考人数 高数 two 上海 2018 1900 5.9 95 four 深圳 2020 1890 5.2 98 提取部分行和部分列('总人数'和'高数'): 总人数 高数 two 1900 95 three 2170 92 four 1890 98
使用loc按字符索引提取数据
使用df.loc[](传入字符索引)可提取行数据,适用于基于标签的索引操作。
print(df.loc['two'])
print(df.loc['two', '省份'])
print(df.loc['two':'three'])
print(df.loc[['one', 'three']])
print(df.loc[['one', 'three'], ['省份', '年份']])
以下是按字符索引提取数据的示例结果: 提取单行'two': 省份 上海 年份 2018 总人数 1900 高考人数 5.9 高数 95 Name: two, dtype: object 提取单个元素: 上海 提取多行'two'到'three': 省份 年份 总人数 高考人数 高数 two 上海 2018 1900 5.9 95 three 广州 2019 2170 6.0 92 提取多行'one'和'three': 省份 年份 总人数 高考人数 高数 one 北京 2017 2200 6.3 90 three 广州 2019 2170 6.0 92 提取多行和多列('省份'和'年份'): 省份 年份 one 北京 2017 three 广州 2019
其他提取方法(ix, iat, at)简介
df.ix、df.iat和df.at也可用于提取行列数据,但这些方法使用频率较低。在实际开发中,推荐优先使用上述df.iloc()和df.loc()方法,它们功能更强大且兼容性更好。
print(df.ix[1:3])
print(df.ix[:, [1, 3]])
print(df.iat[1,3])
print(df.at['two', '省份'])
以下是其他提取方式的示例结果: 提取多行'two'和'three': 省份 年份 总人数 高考人数 高数 two 上海 2018 1900 5.9 95 three 广州 2019 2170 6.0 92 提取单列'年份'和'高考人数': 年份 高考人数 one 2017 6.3 two 2018 5.9 three 2019 6.0 four 2020 5.2 提取单个元素: 5.9 提取单个元素: 上海
本文介绍了Pandas中读取行列数据的多种方法。如需了解更多相关内容,建议查阅本站过往文章或继续浏览后续教程,感谢支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













