python:dataframe

相关:Series一些函数用法

DataFrame

性质:一个表格型的数据结构。它提供有序的列和不同类型的列值。

from pandas import DataFrame
 
## 创建DataFrame ##
 
In [0]:
DataFrame({'col0':[1,2,3], 'col1':[4,5,6]})
Out[0]:
col0	col1
0	1	4
1	2	5
2	3	6
 
In [1]:
data = {'col0':[1,2,3], 'col1':[4,5,6]}
DataFrame(data,columns = ['col1','col0'])
Out[1]:
col1	col0
0	4	1
1	5	2
2	6	3
 
In [2]:
DataFrame(data,columns = ['col1','col0','col2'])
Out[2]:
col1	col0	col2
0	4	1	NaN
1	5	2	NaN
2	6	3	NaN
 
## 获取数据 ##
frame = DataFrame({'col0':[1,2,3], 'col1':[4,5,6]})
 
​In [3]:
frame['col1']
Out[3]:
0    4
1    5
2    6
Name: col1, dtype: int64
 
In [4]:
frame.col1
Out[4]:
0    4
1    5
2    6
Name: col1, dtype: int64
 
## 删除数据 ##
del frame['col1']
 
In [5]:
frame
Out[5]:
col0
0	1
1	2
2	3

reindex

dataframe可以对index或者column使用reindex方法

#DataFrame使用reindex方法
import numpy as np
frame = DataFrame(np.arange(9).reshape((3, 3)), index = ['a', 'c', 'd'], columns = ['Ohio', 'Texas', 'California'])
frame
输出:
    Ohio    Texas   California
a   0   1   2
c   3   4   5
d   6   7   8

frame2 = frame.reindex(['a', 'b', 'c', 'd'])
frame2
输出: 
    Ohio    Texas   California
a   0.0 1.0 2.0
b   NaN NaN NaN
c   3.0 4.0 5.0
d   6.0 7.0 8.0

states = ['Texas', 'Utah', 'California']
frame.reindex(columns = states)
输出:
    Texas   Utah    California
a   1   NaN 2
c   4   NaN 5
d   7   NaN 8

#对DataFrame使用ffill方法,书里的写法会报错,用如下写法是没问题的
frame.reindex(index = ['a', 'b', 'c', 'd'], columns = states).ffill()
输出:
    Texas   Utah    California
a   1.0 NaN 2.0
b   1.0 NaN 2.0
c   4.0 NaN 5.0
d   7.0 NaN 8.0

drop

在这里插入图片描述

loc和iloc

loc是指location的意思,iloc中的i是指integer。这两者的区别如下:

loc works on labels in the index.
iloc works on the positions in the index (so it only takes integers)
也就是说loc是根据index来索引,

如上table定义了一个index,那么loc就根据这个index来索引对应的行。
iloc是根据行号来索引,行号从0开始,逐次加1。

loc和iloc的对比:

df = DataFrame(np.arange(15).reshape((5, 3)), index = ['a', 'c', 'd', 'b', 'e'], columns = ['Ohio', 'Texas', 'California'])
df

输出:
    Ohio    Texas   California
a	0	1	2
c	3	4	5
d	6	7	8
b	9	10	11
e	12	13	14

df.loc['a':'b']
输出:
    Ohio    Texas   California
a	0	1	2
c	3	4	5
d	6	7	8
b	9	10	11

df.iloc[0:3]
输出
	Ohio	Texas	California
a	0	1	2
c	3	4	5
d	6	7	8

df.iloc['a':'b']
输出
报错

df.loc[0:3]
输出
报错

loc的一些用法:

df = pd.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']   # 输出为Seies
输出
max_speed    4
shield       5
Name: viper, dtype: int64

df.loc[['viper']] # 输出为DataFrame
输出
	max_speed	shield
viper	4	5

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

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

>>> df.loc[[False, False, True]]
            max_speed  shield
sidewinder          7       8

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

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

>>> df.loc[lambda df: df['shield'] == 8]
            max_speed  shield
sidewinder          7       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[df['shield'] > 35] = 0
>>> df
            max_speed  shield
cobra              30      10
viper               0       0
sidewinder          0       0

iloc的一些用法:

df.iloc[0]   # 输出是一个Series
输出
Ohio          0
Texas         1
California    2
Name: a, dtype: int32

df.iloc[[0]]  # 输出是DataFrame
输出
	Ohio	Texas	California
a	0	1	2

df.iloc[[1, 4], [0, 2]]
输出
Ohio	California
c	3	5
e	12	14

df.iloc[1:3, 0:3]
输出
	Ohio	Texas	California
c	3	4	5
d	6	7	8

apply

#函数应用和映射
import numpy as np
import pandas as pd
df=pd.DataFrame(np.random.randn(4,3),columns=list('bde'),index=['utah','ohio','texas','oregon'])
print(df)
"""
               b         d         e
utah   -0.667969  1.974801  0.738890
ohio   -0.896774 -0.790914  0.474183
texas   0.043476  0.890176 -0.662676
oregon  0.701109 -2.238288 -0.154442
"""
 
#将函数应用到由各列或行形成的一维数组上。DataFrame的apply方法可以实现此功能
f=lambda x:x.max()-x.min()
#默认情况下会以列为单位,分别对列应用函数
t1=df.apply(f)
print(t1)
t2=df.apply(f,axis=1)
print(t2)
 
"""
b    1.597883
d    4.213089
e    1.401566
dtype: float64
utah      2.642770
ohio      1.370957
texas     1.552852
oregon    2.939397
dtype: float64
"""
 
#除标量外,传递给apply的函数还可以返回由多个值组成的Series
def f(x):
    return pd.Series([x.min(),x.max()],index=['min','max'])
t3=df.apply(f)
#从运行的结果可以看出,按列调用的顺序,调用函数运行的结果在右边依次追加
print(t3)
 
"""
            b         d         e
min -0.896774 -2.238288 -0.662676
max  0.701109  1.974801  0.738890
"""
 
#元素级的python函数,将函数应用到每一个元素
#将DataFrame中的各个浮点值保留两位小数
f=lambda x: '%.2f'%x
t3=df.applymap(f)
print(t3)
"""
            b      d      e
utah    -0.67   1.97   0.74
ohio    -0.90  -0.79   0.47
texas    0.04   0.89  -0.66
oregon   0.70  -2.24  -0.15
"""
 
#注意,之所以这里用map,是因为Series有一个元素级函数的map方法。而dataframe只有applymap。
t4=df['e'].map(f)
print(t4)
 
"""
utah     0.74
ohio     0.47
texas   -0.66
oregon  -0.15
"""

排序

##### DataFrame按引索引/列索引排序,
# 默认axis=0,行索引排序
# axis=1,列索引排序
frame = DataFrame(np.random.randn(4, 3), columns=list('dbe'),index=['Ut', 'Oh', 'Tex', 'Ore']) 
输出
	d	b	e
Ut	1.343094	-0.593928	0.428803
Oh	-0.834637	-0.942729	1.095775
Tex	0.358518	-0.048092	1.330677
Ore	-0.562642	-0.176548	-0.551305

frame.sort_index() # 默认按行升序排序 
输出
	d	b	e
Oh	-0.834637	-0.942729	1.095775
Ore	-0.562642	-0.176548	-0.551305
Tex	0.358518	-0.048092	1.330677
Ut	1.343094	-0.593928	0.428803

frame.sort_index(ascending=False)    
输出
	d	b	e
Ut	1.343094	-0.593928	0.428803
Tex	0.358518	-0.048092	1.330677
Ore	-0.562642	-0.176548	-0.551305
Oh	-0.834637	-0.942729	1.095775
           
frame.sort_index(axis=1) 
输出
	b	d	e
Ut	-0.593928	1.343094	0.428803
Oh	-0.942729	-0.834637	1.095775
Tex	-0.048092	0.358518	1.330677
Ore	-0.176548	-0.562642	-0.551305

frame.sort_index(axis=1, ascending=False) 
输出
	e	d	b
Ut	0.428803	1.343094	-0.593928
Oh	1.095775	-0.834637	-0.942729
Tex	1.330677	0.358518	-0.048092
Ore	-0.551305	-0.562642	-0.176548

 
##### DataFrame按列排序
frame = DataFrame({'a': [1, 3, 1, 5], 'b': [2, 1, 4, 6]})
frame
输出
	a	b
0	1	2
1	3	1
2	1	4
3	5	6

# sort_values方法
frame.sort_values(by=['a', 'b'], ascending=[True, True])
输出
	a	b
0	1	2
2	1	4
1	3	1
3	5	6

frame.sort_values(by=['a', 'b'], ascending=[True, False])
输出
	a	b
2	1	4
0	1	2
1	3	1
3	5	6

汇总统计和计算

在这里插入图片描述

df = DataFrame(np.arange(15).reshape((5, 3)), index = ['a', 'c', 'd', 'b', 'e'], columns = ['Ohio', 'Texas', 'California'])
df
输出
	Ohio	Texas	California
a	0	1	2
c	3	4	5
d	6	7	8
b	9	10	11
e	12	13	14

df.sum()
输出
Ohio          30
Texas         35
California    40
dtype: int64

df.sum(axis = 1)
输出
a     3
c    12
d    21
b    30
e    39
dtype: int64

df.cumsum() # 纵向汇总_累计汇总
输出
	Ohio	Texas	California
a	0	1	2
c	3	5	7
d	9	12	15
b	18	22	26
e	30	35	40

df.max() # 获取每列最大值
输出
Ohio          12
Texas         13
California    14
dtype: int32

df.max() # 获取每行最大值
输出
a     2
c     5
d     8
b    11
e    14
dtype: int32

df.idxmax() # 获取每列最大值对应的索引
输出
Ohio          e
Texas         e
California    e
dtype: object

df.idxmax(axis = 1) # 获取每行最大值对应的索引
输出
a    California
c    California
d    California
b    California
e    California
dtype: object

缺失值处理

在这里插入图片描述

df = DataFrame(np.arange(15).reshape((5, 3)), index = ['a', 'c', 'd', 'b', 'e'], columns = ['Ohio', 'Texas', 'California'])
df.iloc[[1],[1]] = None
df
输出
	Ohio	Texas	California
a	0	1.0	2
c	3	NaN	5
d	6	7.0	8
b	9	10.0	11
e	12	13.0	14

df.dropna()
输出
	Ohio	Texas	California
a	0	1.0	2
d	6	7.0	8
b	9	10.0	11
e	12	13.0	14

df.iloc[[2]] = None
df
输出
	Ohio	Texas	California
a	0.0	1.0	2.0
c	3.0	NaN	5.0
d	NaN	NaN	NaN
b	9.0	10.0	11.0
e	12.0	13.0	14.0

df.dropna(how='all')
输出
	Ohio	Texas	California
a	0	1.0	2
c	3	NaN	5
d	6	7.0	8
b	9	10.0	11
e	12	13.0	14

在这里插入图片描述

数据合并

a)pandas.merge():数据库风格的合并
在这里插入图片描述
b)pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起

pd.concat([s1,s2,s3]) #默认concat在竖轴(axis=0)上连接,即产生新的Series。

数据转换:对数据的过滤、清理以及其他的转换操作

在这里插入图片描述
替换值

data.replace(value,np.nan)

data.replace([value1, value2],[ np.nan,0])

重命名轴索引

data.rename(index=str.title,columns=str.upper)

参考:
Python之DataFrame常用方法小结
Python学习笔记(6):Pandas的reindex方法
Python中的lambda和apply用法
python学习笔记—DataFrame和Series的排序

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值