翼度科技»论坛 编程开发 python 查看内容

pandas获取对应的行或者列方式

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
loc

通过标签或布尔数组访问一组行和列。
.loc[] 主要基于标签,但也可以与布尔数组一起使用。
允许的输入为:

  • 单个标签,例如’a’,
  • 标签列表或数组,例如。[‘a’, ‘b’, ‘c’]
  • 带有标签的切片对象,例如’a’:‘f’。
  • 与切片轴长度相同的布尔数组,例如。[True, False, True]
  • 可对齐的布尔系列。遮罩之前,键的索引将对齐。
  • 可对齐索引。返回的选择的索引将作为输入。

获取单行

为了获取当行,只需要利用行号就能够获取,
  1. >>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
  2. ...      index=['cobra', 'viper', 'sidewinder'],
  3. ...      columns=['max_speed', 'shield'])
  4. >>> print(df.loc["viper"])
  5. max_speed    4
  6. shield       5
  7. Name: viper, dtype: int64
复制代码
获取特定的几行


  • 可以将多个行号组成一个list,然后作为参数输入进去
  1. >>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
  2. ...      index=['cobra', 'viper', 'sidewinder'],
  3. ...      columns=['max_speed', 'shield'])
  4. >>> print(df.loc[["cobra",'sidewinder']])
  5.             max_speed  shield
  6. cobra               1       2
  7. sidewinder          7       8
复制代码

  • 利用切片获取多个连续的行
在利用切片时,也需要使用label进行切片,否则pandas不会识别
  1. >>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
  2. ...      index=['cobra', 'viper', 'sidewinder'],
  3. ...      columns=['max_speed', 'shield'])
  4. >>> print(df.loc[ 'viper': 'sidewinder'])
  5.             max_speed  shield
  6. viper               4       5
  7. sidewinder          7       8
复制代码
获取特定行和列
  1. >>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
  2. ...      index=['cobra', 'viper', 'sidewinder'],
  3. ...      columns=['max_speed', 'shield'])
  4. >>> print(df.loc[ 'viper','shield'])
  5. 5
复制代码
也可以通过切片和列组合,获取特定的数值
  1. >>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
  2. ...      index=['cobra', 'viper', 'sidewinder'],
  3. ...      columns=['max_speed', 'shield'])
  4. >>> print(df.loc['viper': 'sidewinder',:])
  5.             max_speed  shield
  6. viper               4       5
  7. sidewinder          7       8
复制代码
通过bool值进行选择
  1. >>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
  2. ...      index=['cobra', 'viper', 'sidewinder'],
  3. ...      columns=['max_speed', 'shield'])
  4. >>> df.loc[[False, False, True]]
  5.             max_speed  shield
  6. sidewinder          7       8
复制代码
通过条件进行选择获取

通过条件获取,时间也是通过bool获取的一种特例,
  1. >>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
  2. ...      index=['cobra', 'viper', 'sidewinder'],
  3. ...      columns=['max_speed', 'shield'])
  4. >>> df.loc[df['shield'] > 6]
  5.             max_speed  shield
  6. sidewinder          7       8
复制代码
通过下面的结果,我们可以看出,通过条件获取后是一个对象,该对象的值就是一个bool列表,通过条件获取就是通过这个bool列表进行获取
  1. >>> s = df['shield'] > 6
  2. >>> type(s)
  3. <class 'pandas.core.series.Series'>
  4. >>> s.values
  5. array([False, False,  True])
复制代码
通过回调函数获取
  1. >>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
  2. ...      index=['cobra', 'viper', 'sidewinder'],
  3. ...      columns=['max_speed', 'shield'])
  4. >>> df.loc[lambda df: df['shield'] == 8]
  5.             max_speed  shield
  6. sidewinder          7       8
复制代码
对数值进行修改

这里主要讲的是对数值的修改是永久性的,
  1. >>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
  2. ...      index=['cobra', 'viper', 'sidewinder'],
  3. ...      columns=['max_speed', 'shield'])
  4. >>> df.loc[['viper', 'sidewinder'], ['shield']] = 50
  5. >>> df
  6.             max_speed  shield
  7. cobra               1       2
  8. viper               4      50
  9. sidewinder          7      50
复制代码
总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/python/316253wz5.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具