python:dataframe
相关:Series一些函数用法
目录
- DataFrame
- reindex
- drop
- loc和iloc
- apply
- 排序
- 汇总统计和计算
- 缺失值处理
- 数据合并
- 数据转换:对数据的过滤、清理以及其他的转换操作
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 6In [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 3In [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: int64In [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 8frame2 = 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.0states = ['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 14df.loc['a':'b']
输出:Ohio Texas California
a 0 1 2
c 3 4 5
d 6 7 8
b 9 10 11df.iloc[0:3]
输出Ohio Texas California
a 0 1 2
c 3 4 5
d 6 7 8df.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 8df.loc['viper'] # 输出为Seies
输出
max_speed 4
shield 5
Name: viper, dtype: int64df.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
>>> dfmax_speed shield
cobra 1 2
viper 4 50
sidewinder 7 50# 对整行设置值
>>> df.loc['cobra'] = 10
>>> dfmax_speed shield
cobra 10 10
viper 4 50
sidewinder 7 50# 对整列设置值
>>> df.loc[:, 'max_speed'] = 30
>>> dfmax_speed shield
cobra 30 10
viper 30 50
sidewinder 30 50# 对满足条件的行设置值
>>> df.loc[df['shield'] > 35] = 0
>>> dfmax_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: int32df.iloc[[0]] # 输出是DataFrame
输出Ohio Texas California
a 0 1 2df.iloc[[1, 4], [0, 2]]
输出
Ohio California
c 3 5
e 12 14df.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.551305frame.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.428803frame.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.095775frame.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.551305frame.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 6frame.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 14df.sum()
输出
Ohio 30
Texas 35
California 40
dtype: int64df.sum(axis = 1)
输出
a 3
c 12
d 21
b 30
e 39
dtype: int64df.cumsum() # 纵向汇总_累计汇总
输出Ohio Texas California
a 0 1 2
c 3 5 7
d 9 12 15
b 18 22 26
e 30 35 40df.max() # 获取每列最大值
输出
Ohio 12
Texas 13
California 14
dtype: int32df.max() # 获取每行最大值
输出
a 2
c 5
d 8
b 11
e 14
dtype: int32df.idxmax() # 获取每列最大值对应的索引
输出
Ohio e
Texas e
California e
dtype: objectdf.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 14df.dropna()
输出Ohio Texas California
a 0 1.0 2
d 6 7.0 8
b 9 10.0 11
e 12 13.0 14df.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.0df.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的排序
python:dataframe相关推荐
- python:dataframe保存成csv文件和读取
一.从csv文件读取数据为dataframe 函数原型: pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='i ...
- python:dataframe groupby后agg、apply、transfrom用法
import pandas as pd data = pd.DataFrame({'name':['wencky','stany','barbio','barbio'],'age':[29,29,3, ...
- python:DataFrame的创建以及DataFrame的属性
一.DataFrame的创建 Pandas 的数据结构主要是:Series(一维数组),DataFrame(二维数组).DataFrame是由索引和内容组成,索引既有行索引index又有列索引colu ...
- Python:dataframe读取以文本形式存储的数字
pd.read_excel('xxx.xlsx', converters = {列名:数据类型})
- python pandas dataframe 行列选择,切片操作 原创 2017年02月15日 21:43:18 标签: python 30760 python pandas dataframe
python pandas dataframe 行列选择,切片操作 原创 2017年02月15日 21:43:18 标签: python / 30760 编辑 删除 python pandas dat ...
- Python语言学习之pandas:DataFrame二维表的简介、常用函数、常用案例之详细攻略
Python语言学习之pandas:DataFrame二维表的简介.常用函数.常用案例之详细攻略 目录 DataFrame的简介 DataFrame的常用案例 1.写入和读取excel表格文件
- python pandas修改列名,Python_Pandas学习笔记02:DataFrame获取列名和修改列名
Python_Pandas学习笔记02:DataFrame获取列名和修改列名 Python_Pandas学习笔记02:DataFrame获取列名和修改列名 一.参考资料 [1].?Pandas获取列名 ...
- Python语言学习之pandas:DataFrame二维表的简介、常用函数、常用案例(增删改查排序之选择指定列、根据条件选择特定数据、赋值、列名重命名、修改列数据、处理缺失值、列合并、分组之详细攻略
Python语言学习之pandas:DataFrame二维表的简介.常用函数.常用案例(增删改查排序之选择指定列.根据条件选择特定数据.赋值.列名重命名.修改列数据.处理缺失值.列合并.分组之详细攻略 ...
- (六)Python:Pandas中的DataFrame
目录 基本特征 创建 自动生成行索引 自定义生成行索引 使用 索引与值 基本操作 统计功能 基本特征 一个表格型的数据结构 含有一组有序的列(类似于index) 大致可看成共享同一个index的Ser ...
最新文章
- 企业 SpringBoot 教程(六)springboot整合mybatis
- tf.metrics.accuracy
- 在Red Hat Linux中自动运行程序
- @FunctionalInterface
- 基于Xml 的IOC 容器-载入<property>元素
- linux+svn+拉取版本_在linux客户端下管理svn版本库
- oracle 最小权限,oracle低权限下获取shell
- Kotlin实现LeetCode算法题之String to Integer (atoi)
- 侧信道实验实验三 S盒CPA侧信道攻击
- 递归算法php,PHP递归算法的详细示例分析
- 2021高考成绩查询数学和物理,2021高考成绩什么时候几点可以查
- 云呐|常用的固定资产盘点方法有哪些
- 23andme的申请流程和注意事项
- python2中print不换行及print不换行且无空格写法
- 文字生成图片html,根据文字生成图片
- Windows10和Ubuntu双系统如何卸载Ubuntu系统
- Android 麦克风录音动画
- 【Ant Design】下拉列表Select 、日期选择框DatePicker等跟随滚动条上下移动解决方案
- 读书笔记:《启示录》
- 是谁在偷窥你的手机隐私?