pandas中简单数据处理
简介
Pandas库中有loc和iloc以及ix可以用来索引数据,抽取数据;现在官方已经不建议使用ix进行数据索引,所以这里参看官方文档介绍一些loc和iloc的简单操作。
pandas.DataFrame[val]
使用过程中发现直接使用dataframe时,dataframe[val]中的val有几种形式:
1.列名,也就是columns名,可以是单个列或者是由列名组成的列表,如果是单个列名则返回Serie对象,如果是列表则返回DataFrame对象
2. 分片,用来进行行切片,比如df[:],则会选择所有的行,即使只有一行返回的也是DataFrame对象,df[:2]选择前两行,这里需要注意,如果说df的index本身就是数值型,比如说是0,1,2,3,4,5…这样的索引,那么df[:2]选择的将是index为0和1的行,也就是说数字分片优先选择的是行数而不是行标签。但是对于ix命令来说,df.ix[:2]选择是标签号从开始至2(包括)的行,也就是上面的0,1,2行
3. boolean数组,这个很好理解,选择boolean数组中为True的值,为被选中的值会被值为NaN3. boolean数组,这个很好理解,选择boolean数组中为True的值,为被选中的值会被值为NaN
4. 布尔型DataFrame,作用和boolean相似,但是需要该DataFrame和df的columns值相等,否则会报错
pandas.DataFrame.loc[val]
dataframe.loc[val]主要是通过标签或者数组来访问行和列:
inputs:
- 单个标签,例如:5或’a’(注意,它5被解释为索引的标签,并且从不作为索引的整数位置
- 标签列表或数组,例如。[‘a’, ‘b’, ‘c’]
- 带有标签的切片对象,例如’a’:‘f’
- 与被切片的axis长度相同的布尔数组,例如。[True, False, True]
- 具有一个参数(调用Series,DataFrame或Panel)的可调用函数,它返回索引的有效输出(上述之一)
DataFrame.loc[val]例子
导入模块并创建dataframe
import pandas as pd
import numpy as np
df = pd.DataFrame([[1,2],[3,4],[4,5]],
index=['one', 'two', 'three'],
columns=['a', 'b'])
单一标签:通过index中的标签’one’返回a和b两行的数据
df.loc['one']
return:
a 1
b 2
Name: one, dtype: int64
标签列表:使用[[]]返回标签列表数据
df.loc[['one','two']]
return:
a b
one 1 2
two 3 4
行和列的单个标签
df.loc['one','b']
return:
2
通过切片行标签和列进行索引
df.loc['two':'three','b']
return:
two 4
three 5
Name: b, dtype: int64
通过条件返回一个布尔系列
df.loc[df['a'] > 3]
return:
a b
three 4 5
通过条件返回指定了列标签的布尔系列
df.loc[df['a']>3,['b']]
returen:
b
three 5
设置值
设置与标签列表匹配的所有项目的值
df.loc[['one','two'],['a']]=10
df
return:
a b
one 10 2
two 10 4
three 4 5
设置整行的值
df.loc['three']=20
df
return:
a b
one 10 2
two 10 4
three 20 20
设置整列的值
df.loc[:,'b']=30
df
return:
a b
one 10 30
two 10 30
three 20 30
设置匹配可调用条件的行的值
df.loc[df['a']>10]=40
df
return:
a b
one 10 30
two 10 30
three 40 40
pandas.DataFrame.iloc[val]
dataframe.iloc[val]主要是通过整数位置访问行和列的组:
inputs:
- 一个整数,例如5。
- 整数的列表或数组,例如。[4, 3, 0]
- 具有整数的切片对象,例如1:7
- 布尔数组
- 具有一个参数(调用Series,DataFrame或Panel)的可调用函数,它返回索引的有效输出(上述之一)
DataFrame.iloc[val]例子
通过列切片索引
df.iloc[1:3]
return:
a b
two 10 30
three 40 40
通过行和列的位置索引
df.iloc[[0,2],:]
return:
a b
one 10 30
three 40 40
df.iloc[[0,2],1]
return:
one 30
three 40
Name: b, dtype: int64