当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python pyspark DataFrame.loc用法及代码示例


本文简要介绍 pyspark.pandas.DataFrame.loc 的用法。

用法:

property DataFrame.loc

通过标签或布尔系列访问一组行和列。

.loc[] 主要基于标签,但也可以与从 DataFrame 或系列派生的条件布尔系列一起使用。

允许的输入是:

  • 单个标签,例如5或者'a', (注意5被解释为标签的 index ,和绝不作为沿索引的整数位置)用于列选择。

  • 标签列表或数组,例如['a', 'b', 'c']

  • 带有标签的切片对象,例如'a':'f'

  • 从 DataFrame 或系列派生的条件布尔系列

  • 与被切片的列轴长度相同的布尔数组,例如[True, False, True]

  • 一个可对齐的布尔 Pandas 系列到被切片的列轴。键的索引将在屏蔽之前对齐。

Pandas 允许的不允许输入是:

  • 与被切片的行轴长度相同的布尔数组,例如[True, False, True]

  • 带有一个参数的 callable 函数(调用系列、DataFrame 或面板)并返回有效的索引输出(以上之一)

注意

尚不支持MultiIndex。

注意

请注意,与通常的 python 切片相反,两个都包括起点和终点,不允许切片的步长。

注意

对于行选择的标签列表或数组,pandas-on-Spark 充当过滤器,无需按标签重新排序。

例子

获取值

>>> df = ps.DataFrame([[1, 2], [4, 5], [7, 8]],
...                   index=['cobra', 'viper', 'sidewinder'],
...                   columns=['max_speed', 'shield'])
>>> df
            max_speed  shield
cobra               1       2
viper               4       5
sidewinder          7       8

单标签。请注意,这会将行作为系列返回。

>>> df.loc['viper']
max_speed    4
shield       5
Name: viper, dtype: int64

标签列表。注意使用[[]] 返回一个DataFrame。另请注意,pandas-on-Spark 只是一个过滤器,没有按标签重新排序。

>>> df.loc[['viper', 'sidewinder']]
            max_speed  shield
viper               4       5
sidewinder          7       8
>>> df.loc[['sidewinder', 'viper']]
            max_speed  shield
viper               4       5
sidewinder          7       8

列的单个标签。

>>> df.loc['cobra', 'shield']
2

行的标签列表。

>>> df.loc[['cobra'], 'shield']
cobra    2
Name: shield, dtype: int64

列的标签列表。

>>> df.loc['cobra', ['shield']]
shield    2
Name: cobra, dtype: int64

行和列的标签列表。

>>> df.loc[['cobra'], ['shield']]
       shield
cobra       2

带有行标签和列标签的切片。如上所述,请注意切片的开始和停止都包括在内。

>>> df.loc['cobra':'viper', 'max_speed']
cobra    1
viper    4
Name: max_speed, dtype: int64

返回布尔系列的条件

>>> df.loc[df['shield'] > 6]
            max_speed  shield
sidewinder          7       8

返回具有指定列标签的布尔系列的条件

>>> df.loc[df['shield'] > 6, ['max_speed']]
            max_speed
sidewinder          7

与被切片的列轴长度相同的布尔数组。

>>> df.loc[:, [False, True]]
            shield
cobra            2
viper            5
sidewinder       8

与被切片的列轴对齐的布尔系列。

>>> df.loc[:, pd.Series([False, True], index=['max_speed', 'shield'])]
            shield
cobra            2
viper            5
sidewinder       8

设定值

为与标签列表匹配的所有项目设置值。

>>> df.loc[['viper', 'sidewinder'], ['shield']] = 50
>>> df
            max_speed  shield
cobra               1       2
viper               4      50
sidewinder          7      50

整行的设置值

>>> df.loc['cobra'] = 10
>>> df
            max_speed  shield
cobra              10      10
viper               4      50
sidewinder          7      50

为整列设置值

>>> df.loc[:, 'max_speed'] = 30
>>> df
            max_speed  shield
cobra              30      10
viper              30      50
sidewinder         30      50

为整个列列表设置值

>>> df.loc[:, ['max_speed', 'shield']] = 100
>>> df
            max_speed  shield
cobra             100     100
viper             100     100
sidewinder        100     100

用 Series 设置值

>>> df.loc[:, 'shield'] = df['shield'] * 2
>>> df
            max_speed  shield
cobra             100     200
viper             100     200
sidewinder        100     200

使用具有整数标签的索引获取 DataFrame 上的值

另一个使用整数作为索引的例子

>>> df = ps.DataFrame([[1, 2], [4, 5], [7, 8]],
...                   index=[7, 8, 9],
...                   columns=['max_speed', 'shield'])
>>> df
   max_speed  shield
7          1       2
8          4       5
9          7       8

用整数标签对行进行切片。如上所述,请注意切片的开始和停止都包括在内。

>>> df.loc[7:9]
   max_speed  shield
7          1       2
8          4       5
9          7       8

相关用法


注:本文由纯净天空筛选整理自spark.apache.org大神的英文原创作品 pyspark.pandas.DataFrame.loc。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。