二、DataFrame

1、创建DataFrame

1) 创建DataFrame的通用函数:

df = pd.DataFrame(values,index,columns)

pd.dataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'],columns=['bj','sh','sz'])

pd.dataFrame(np.arange(1,10).reshape(3,3),index=['a','b','c'],columns=['bj','sh','sz'])

pd.dataFrame('bj':[1,4,7],'sh':[2,5,8],'sz':[3,6,9],index=['a','b','c'])

说明:创建方法与Sries类似,Series的values参数是python中常见的一维数据类型,DataFrame的values参数是python中常见的二维数据类型。

2) 通过网页中复制数据快捷创建

import webbrowser

link = 'https://www.tiobe.com/tiobe-index/'

webbrowser.open(link)

打开界面进行复制,将数据复制到粘贴板中

df = pd.read_clipboard() #从粘贴板中读取数据

3)通过Series创建DataFrame

df = pd.DataFrame([s1,s2,s3],columns=['bj','sh','sz'])

注意:单独的s1,s2,s3是纵向排列的的Series,但是在DataFrame中是横向排列的。

自己总结:Series除了打印出来是Series格式外,其他时候可以直接当作list来操作。

2、属性

1)df.columns

通过columns生成新的DataFrame

df_new = pd.DataFrame(df,columns=['x1','x2'])

或者df_new = df[['x1','x2']]

2)df.shape 显示行列数

3)df.head() 默认显示前5行

4)df.tail() 默认显示后5行

3、获取DataFrame的列

1)获取DataFrame某一列

df.x1或df['x1']:返回值是Series,可以理解为一个DataFrame是由多个Series组成的。

2) 获取DataFrame某几列

df_new = df[['x1','x2','x3']]

4、为某列赋值

1) df['x1'] = range(10)

2) df['x1'] = numpy.arange(10)

3) df['x1'] = pd.Series(np.arange(10))

说明:类似于创建Series

5、为某列对应的特定行重新赋值

df['x1'] = pd.Series([2,3],index=[0,1])

将列为x1,行索引为0和1的值改为2,3

6、获取DadaFrame的行

for row in DataFrame.iterrows():

print(row[0],row[1])

#每个row是一个元祖,包含2个元素,row[0]是整型索引,row[1]是Series,所以从行的角度也可以看出,一个DataFrame是由多个Series组成的。

7、DataFrame的转置

df_new = df.T

三、DataFrame的IO操作

1、粘贴板的io

df = pd.read_clipboard()

df.to_clipboard()

2、csv的io

df.to_csv('xxx.csv')

df = pd.read_csv('xxx.csv')

3、json的io

df.to_json()

pd.read_json(df.to_json())

4、excel的io

df.to_excel('xx.xlsx')

df = pd.read_excel('xx.xlsx')

5、df = pd.read_sql('')

df.to_sql('')

四、DataFrame的切片操作

1、iloc

sub_df = df.iloc[10:20,:] 选取DataFrame的10-20行,所有列数据

sub_df = df.iloc[10:20,0:2]

说明:iloc函数是位置索引,与索引的名字无关。

2、loc

sub_df = df.loc[10:20,:'movie_name']

说明:loc是标签索引,10,20,'movie_name' 都是索引名字,与位置无关。

五、Series和DataFrame的reindex

1、Series.reindex(index=['x1','x2','x3'],fill_value=10)

将df重新索引,并且将NaN空值用10进行填充

2、Series.reindex(index=range(15),method='ffill')

前项填充,后面的值用前面的值进行填充

通过reindex想到,如果想新增一个空列或者空行,可以用reindex方法,同样地,想减少某些行或者某些列,也可以用reindex方法。

六、Series和DataFrame的drop

继reindex之后删除行列的函数操作

Series.drop('A') #删除'A'所对应的值

DataFrame.drop(label,axis)

label可以是行名也可以是列名,label是行的话axis是0,label是列的话axis是1。

** 删除行还可以用 del df['A']

七、NaN(not a number)

nan是numpy的一种数据类型,np.nan,float类型

任何数据与nan的运算结果都是nan

1、nan in Series

Series.isnull() -->返回value为True或者False的Series

Series.notnull() -->返回value为True或者False的Series

Series.dropna() -->返回删除nan值后的Series

Series.fillna(method='ffill') -->前项插值,按照前面的值填充后面的空值

2、nan in DataFrame

df.isnull() -->返回value为True或者False的DataFrame

df.notnull() -->返回value为True或者False的DataFrame

df.dropna(axis=0/1,how='any/all',thresh=None)

说明:axis表示删除行为nan或者列为nan;

any表示只要有一个为空,all表示行中的每个元素或者列中的每个元素为空;

thresh是阈值的意思,表示某行或者某列nan的个数达到阈值的个数时才删除该行或该列。

df.fillna(value=1) --->所有的空值都填充为1

df.fillna(value={0:0,1:1,2:2}) --->将0列的空值填为0,1列的空值填为1,2列的空值填为2,默认为填充列

注意:fillna和dropna的特点,生成新的DataFrame,原来的DataFrame不变。

八、多重索引--目前用的比较少,不太熟

1、多重索引介绍

Series = pd.Series(np.random.randn(6),index=[['1','1','1','2','2','2'],['a','b','c','a','b','c']])

'1','2'为一级索引,'a','b','c'为二级索引

df 可以看做是索引的'1','2'的Series

Series['1'] -->Series

Series['1']['a'] -->value

Series[:,'a'] -->选择'1'和'2'中的'a'对应的值

2、多重索引格式转为二维DataFrame

df = Series.unstack() -->转为二维DataFrame

3、多重索引在DataFrame中的操作

九、mapping和replace

1、 map函数与apply函数、applymap函数的区别:

1)map函数对Series中的每个元素作用;

2)applymap函数对DataFrame中的每个元素作用;

3)apply函数对对DataFrame和Series的一列做整体运算。

2、Series.replace(to_replace=[2,3,4],values=[20,30,40]) 替换Series中多个值

Series.replace({1:10,2:20}) 将索引为1的值替换为10,将索引为2的值替换为20

十、运算

df.sum() -->默认按照列进行求和,nan的值被忽略

df.min() -->默认按照列求最小值

df.max() -->默认按照列求最大值

df.mean() -->默认按照列求平均值

df.describe() -->默认按照列进行描述

df.sum(axis=1) -->按行求和,nan的值被忽略

#axis=0表示对横轴进行操作,但是运算中表现为纵轴操作

#axis=1表示对纵轴进行操作,但是运算中表现为横轴操作

十一、分箱操作

bins = [0,59,70,80,100],bins是分割范围

score_cat = pd.cut(Series,bins) --->得到catgory类型的数据

DataFrame的分箱技术很棒啊!

pd['catgory'] = pd.cut(df['a'],bins=[0,59,70,80,100],labels=['low','ok','good','great'])

-->新增一列,将a列的值按照labels进行分类标记,good!!!

#生成长度为3的随机字符串 pd.util.testing.rands(3)

十二、分组操作

1、按照一列分组

g = df.groupby('city')

g是分组类型数据,打印不出来,所以看不到,但是有属性和方法可以间接的了解

1) g.groups -->得到分的几个组,和每个组包含的索引

2)g.get_group('BJ') -->得到'BJ'所对应的组

3)groupby = split +apply +combine

g.mean() -->求每组的平均值

g.max() -->求每组的最大值

g.min() -->求每组的最小值

g.count()

g.describe()

4)g是一个可迭代对象,可以用list函数将其转化为list

list(g) -- > [('组名1',DataFrame1),('组名2',DataFrame2),(),()]

dict(list(g)) -->将其转化为字典

同时可以通过for循环进行遍历操作:for item,desc in g:print(item,desc)

#怪不得分组后不是DataFrame,因为元组的第一个元素是'分组名'。

2、按照多列分组

g_new = df.groupby(['city','wind'])

得到生成器((('分组1','分组2'),DataFrame),(),()...)

g_new.get_group(('分组1','分组2'))

for (name_1,name_2),group in g_new:

print((name_1,name_2),group)

十三、数据聚合

g.mean() -->求每组的平均值

与g.agg('mean')方法一样

十四、透视表

pd.pivot_table(df,index=['',''],aggfuc='sum',values=['',''])

index是分组的组名,values是透视表呈现结果的列,columns是values下的分解

#感觉透视表呈现的结果就是groupby+agg后的结果

#分析者需要对数据结构有一定的了解

十五、其他函数

df.sort_values(by='',ascending=True/False)[:10] df可以索引

df.value_counts() -->按值计数

df.['a'] = df['b'].apply(lambda x:x>0) -->DataFrame中的True/False

通过g.size()可以看到被groupby之后的数据,得到的是一个Series

十六、排序

1、Series的排序:

1)对值进行排序

Series.sort_values() --->直接对Series的值进行排序

2)通过索引进行排序

Series.sort_index()

#默认都是升序排列

2、DataFrame的排序

df.sort_values(by='') -->按照某列的顺序进行排序

df['a'].sort_values() -->返回对a列数据的排序结果,只返回a列

十七、DataFrame的rename

1、df.index = Series(['a','b','c']) 直接对index赋予新值

2、df.index = df.index.map(str.upper)

map函数中只传入新的函数名即可

3、df.rename(index=str.upper,columns=str.lower)

或者传递字典,进行一一转换

十八、DataFrame的merge

pd.merge(df1,df2,on=None,how='left/right/inner/outer')

pd.merge(df1,df2) -->没有on参数默认先找相同的columns,然后在columns下找相同的values

pd.merge(df1,df2,on='columns') -->on参数是指按照指定列进行merge

left:表示以左边的数据表为基准,进行填充右面的数据

right:表示以右边的数据表为基准,填充左边的数据

outer:以on的指定列的所有值为基准,填充两边的数据

inner:默认inner,相同on指定的columns下的相同values对应的左右两边的数据

十九、concat和combine

1、concat拼接

pd.concat([Series1,Series2])

pd.concat([df1,df2]) -- >上下叠加,将没有的列进行填充

2、combine组合

Series1.combine_first(Series2) -->用Series2的值去填充Series1中为空的值

df1.combine_first(df2) --->用df2将df1中的空值填充

二十、apply

df['A'] = df['A'].apply(str.upper) --->apply函数中也只输入函数名

二十一、去重

len(df) -->求df的长度

len(df['a'].unique()) -->查看a列中不重复数据的多少

Series.duplicated() -->返回一列True/False的Series

Series.drop_duplicates() -->删除重复值

df.drop_duplicates('a',keep='first/last')

df.drop_duplicates() -->删除完全重复的行

参数:'a'表示以a列为基准,删除重复值

first表示保留第一个,last表示保留最后一个

二十二、时间序列操作

data_list = pd.date_range(start,end,period='D',freq)

period='D',以天为单位

freq = 'W' 以周为单位

freq = 'W-Mon'以每周一位单位

freq = '5H' 以5h为单位

以data_range作为索引提取数据比较简单

df[datetime(2017,9,1)]

df['2017-09-01']

df['20170901']

df['201709']

对时间序列数据进行分组聚合操作:

s1.resample('M').mean() -->以月为单位进行采样,然后求每组的平均值

s1.resample('H').ffill() -->前项填充

s1.resample('H').bfill() -->后项填充

补充:1)jupyter中可以执行linux命令,太棒了!

!ls

!more xxx.csv

!pwd 等等

2)jupyter 查看函数帮助的快捷键:摁住shift + tab 棒!!!

作者:肖月_1d28

链接:https://www.jianshu.com/p/1318b85f6eed

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

df pd 属性_DataFrame 常用方法属性相关推荐

  1. php查询对象是否有某个属性可用,JavaScript 判断对象中是否有某属性的常用方法...

    判断对象中是否有某属性的常见方式总结,不同的场景要使用不同的方式. 一.点( . )或者方括号( [ ] ) 通过点或者方括号可以获取对象的属性值,如果对象上不存在该属性,则会返回undefined. ...

  2. 【转载】Response对象的作用以及常用方法属性

    Response对象是Asp.Net应用程序中非常重要的一个内置对象,其作用为负责将服务器执行好的信息输出给客户端,即作用主要为响应客户端请求并将服务器的响应返回给用户,在页面的临时跳转中,也可使用R ...

  3. 【Android 逆向】Android 权限 ( ro.product.cpu.abi 属性 | ro.zygote 属性 | dhcp.eth0 属性 | net.* 属性 )

    文章目录 一.Android 权限相关的重要的系统属性 1.ro.product.cpu.abi 属性 2.ro.zygote 属性 3.dhcp.eth0 属性 4.net.* 属性 一.Andro ...

  4. html属性是dom属性吗,HTML DOM 属性 对象

    HTML DOM 属性 对象 HTML DOM 节点 在 HTML DOM (Document Object Model) 中, 所有的都是 节点: 文档是文档节点 所有 HTML 元素是元素节点 所 ...

  5. java 文件拷贝保留原来的属性_Java常用属性拷贝工具类使用总结

    开头聊几句 1.网上很多的技术文章和资料是有问题的,要学会辨证的看待,不能随便就拿来用,起码要自己验证一下 2.关注当下,关注此刻,如果你真正阅读本篇文章,请花几分钟时间的注意力阅读,相信你会有收获的 ...

  6. 前端知识——盒子类型,浮动属性,定位属性,JavaScript基础语法

    文章目录 CSS-盒子类型 margin padding 浮动属性 CSS-溢出属性 overflow的设置项 CSS-定位属性 定位状态 定位操作 CSS-z-index JavaScript 简介 ...

  7. Python 类—类属性(私有属性、公有属性、实例属性、局部变量)类方法(实例方法、静态方法)

    1. 创建类 类是对某个对象的定义,它包含有关对象动作方式的信息,包括它的名称.方法.属性和事件.类不存在于内存中,因此它本身并不是对象.当程序运行需要引用类的代码时,就会在内存中创建一个类的新实例, ...

  8. items属性的combo_【内存消耗问题】DataGridViewComboboxColoumn关于Items属性和DataSource属性的性能开销问题...

    [问题场景]:新建窗体应用程序,Form中添加1个DataGridView控件,并新增1列数据(列类型为DataGridViewComboboxColoumn).下拉列表绑定15000条选项值,表格添 ...

  9. R语言attributes函数(获取属性、设置属性)、attr函数(改变一个属性)、structure函数(改变数据形状)实战

    R语言attributes函数(获取属性.设置属性).attr函数(改变一个属性).structure函数(改变数据形状)实战 目录

最新文章

  1. Android:图片加载库Glide VS Picasso
  2. strcpy_s与strcpy对照
  3. 【大牛系列教学】java面试常考的编程题
  4. python商品总价_【Python基础 | 列表】小实验:实现显示商品,选择商品,将商品加入购物车,得到总价格...
  5. Qt笔记-拖动文件到QWidget(获取拖动文件路径)
  6. adb avd install 失败_Android 模拟器(emulator-5554...)出现错误解决办法
  7. 全角符号和半角符号的区别
  8. 平面设计师okr_掌握OKR工作法,教你快速提升工作效率
  9. php 防挂马,织梦dedecms安全设置防挂马教程
  10. java支付宝转账到银行卡_Java 支付宝支付,退款,单笔转账到支付宝账户(单笔转账到支付宝账户)...
  11. html 表单form代码,html - 表单form(示例代码)
  12. 日语中的接打电话礼貌用语
  13. Perl/Tkx ---- tcl/tk文本组件text
  14. 漫画 | Code Review快把我逼疯了!
  15. matlab 中关于nargin 以及 varargin 函数的使用
  16. leetcode 最长单词
  17. 极路由 openwrt 使用 SyncY 实现百度云同步
  18. 基于Python根据置信度区间计算植被覆盖度
  19. 如何学习Unity3D
  20. oracle账号过期和账号被锁

热门文章

  1. Tmux常用命令小结(超全够用)
  2. Appium+python(1):python运行真机App程序示例
  3. 用python开发一款云笔记_Python成为专业人士笔记–os模块
  4. 电脑卡顿反应慢怎么办?这几招教给你!
  5. 15天入门Python,每天都该干嘛,规划路线。
  6. Guys, what is better than sex?
  7. php 实现繁体转简体代码效率对比
  8. 长理2019选拔赛1.0
  9. 这样的心态,值得拥有
  10. HDU 2072 单词数 Trie 如何debug一颗Trie