python如何从⼀个dataframe提取相应的⾏组成⼀个新的
dataframe_Pyt。。。
⼤家好!好久不见!适逢国庆,先祝我亲爱的祖国七⼗周年⽣⽇快乐!
数据预处理操作的整理。我们希望通过它们,带领⼤家了解和熟悉⼀些python做数据清洗,数这⼀系列⽂章是针对最近在实习中做的⼀些数据预处理
据整合等的常见操作。
并不假设你对python是零基础的。但是如果你和我⼀样,也是⼀个数据科学中探索的专题⽂章,也就是说这⼀系列⽂章并不假设你对python是零基础的
请注意我们这是专题
⼩⽩,那么我希望你也能够通过这些⽂章,在⼀个⼀个的数据处理的坑中爬起来,总结经验,奋勇前⾏~
基础,重写这⼀系列⽂章之前我也咨询了⽼板的意见,也得到了他的同意。说这句话的意思是:所有这⾥涉及的操作,在数据分析中都是基础,重要和容易踩坑的
要和容易踩坑的。所以即使你现在觉得它们难以理解,或者⽤不上,以后也⼤概率会碰到。还需要和⼤家说的是,为了防⽌泄露商业机密事先做过处理。
和业务材料,我们的数据集事先做过处理
Python3的。
那么我们开始吧。没有特殊介绍,我们都是使⽤Python3
1. 准备操作,装包,导⼊
虽然这⾮常简单,但我们还是提⼀下。凡是做数据预处理,都不可避免的⽤上这两个包。
import
如果你要做基本的可视化,那还需要这个包
import
这句语法的意思就是:导⼊...包,并给它命名为np/pd。很多⼈经常在代码中看到诸如np., pd. 这样的前缀,意思就是调⽤numpy/pandas ⽅法)。
内的函数(还有⼀个说法叫⽅法
⽹络上有⾮常多关于这两个包的命令详解,百度⼀下都有。⾄于如何安装,各位只需要百度⼀下anaconda即可。anaconda本⾝就可以理解为是⼀个封装好的python环境,⾥⾯已经事先有安装好⼤部分必备的库。
当然,你也可以使⽤
pip
不是anaconda内的那个(当你电脑⾥装了不⽌⼀个py的时候,这种情况是完全有可能的)。除了环有⼀个情况是你电脑⾥的默认python不是anaconda内的那个
境变量的优先级调整法(具体的可以百度),还有⼀种⽅法我觉得更⽅便,就是打开anaconda的prompt。
这个Prompt可以理解为anaconda内⾃⼰的cmd (command line)。那么这个时候,下⾯这⼀⾏代码
就可以⾃动把你想要安装的包安装到你的anaconda中。对于我这种py底层机理⼀窍不通的⼈来说,这已经够⽤了,也很⽅便。虽然⼤部分情况都可以通过anaconda的可视化界⾯完成,但是我就碰到了tensorflow装不上的情况,这个时候就只能采⽤上⾯那种⽅法了。
2. 读取数据,创建数据框
配置有了,下⼀步⾃然是读取数据,创建dataframe了。dataframe是pandas特有的⼀种数据结构,通俗理解就是⼀种计算机中存储数据
计算机中存储数据的结构,好吧这好像是⼀句废话……
的结构
我截取了⼀部分我司的数据集(很显然不可能是真实的,我在上⾯说过了),我们希望⽤它作为我们的例⼦,那么很显然就需要构造⼀个dataframe来存储它。常见的操作就是先构造⼀个字典,再转换。具体如下
Table
如果你运⾏正常的话,最后应该可以看到这样的结果。
(这是在Jupyter Notebook上运⾏的,如果你在别的IDE上运⾏,显⽰的样⼦可能会有些不⼀样)相信通过这个例⼦你也⼤概明⽩了什么是⼀个dataframe。
⾸字母⼤写的。
注意
注意:代码pd.DataFrame()中是⾸字母⼤写
注意:你也许看到了这么⼀⾏代码
注意
[
列表⽣成式。⽐⽅说它的⽬的就是⽣成1-9的⼀个列表。如果把它拆分⼀下,就是这么⼀个意思
这是列表⽣成式
A
尾插⼀个元素。range是⼀个迭代器,具体⽤法百度。
append⽅法就是在已有的列表之后再尾插
很显然我们不会⼀直这么录⼊数据的,实际的数据集⼀般都是很⼤的。这个时候⼀般都会读取已有的⼤的.csv格式的数据集。⼀般使⽤Table
⽐⽅说如果要读取上⾯的那个数据集,那么你的csv⽂件⽤excel打开应该长这样
python怎么读入excel
⽤逗号分隔的⽂本⽂件,所以没有xls/xlsx⽂件那么⼤。当然了很多格式也⽆法保存在.csv⽂件中(⽐⽅说对⼀个数据.csv⽂件本质上是⽤逗号分隔的⽂本⽂件
标红,加粗等,这些格式都⽆法保存)。如果你⽤记事本打开.csv,⽂件是长这样的,朴实⽽⽆华。
那么多逗号是因为我⼿动删除了很多列……
最后说⼏个参数
encoding: 转换编码。这个在读取我司的数据的时候尤其重要,因为外⾯的数据⼀般都很脏(意思就是处理不当就是乱码),所以强制为utf-8⼀定是坠吼的(最重要的是它对中⽂的⽀持⾮常好,所以数据看起来就很舒服)
sep: 指定分隔符。因为有的⽂件可能会以tab为分隔符,这是为了防⽌出现⼀种情况就是表的内容本⾝也存在逗号
表的内容本⾝也存在逗号(⽐⽅说有⼈⼿贱把2019/6/1改成2019,6,1)。当然⼀般的数据库都没这个处理,这个时候就只能⼿动来了……
error_bad_lines: 这其实也是针对上⾯这种情况,因为如果识别逗号的时候发⽣错误,就会出现列名数和列数不⼀致的情况(⽐⽅说2019,6,1就会被拆成2019,6和1,本来是⼀个cell⾥的元素,硬是被拆到了3个cell⾥)。那么这个时候设置为False,系统就直接忽略这样的⾏了。
⼤数据架构的相关内容短时间并不会提到。
在介绍下⼀个环节之前,我需要提⼀下的是我们的所有数据分析都会在本地进⾏
都会在本地进⾏。关于⼤数据架构
3. 数据拼接
虽然我们的数据⾮常⼩,但是实际情况下,数据因为过⼤很多时候在下载,提取的时候都会占⽤巨⼤的时间,因此很多时候我们都会分批次的下载。这种情况下我们⾃然需要把数据“拼”起来。如何去做呢?
Temp
按列拼接了。当然了,事先你需要把⼀
按⾏拼接,axis=1就是按列拼接
列名,列数都是要相同
些该拼起来的dataframe放在⼀个列表⾥。⾃然你还需要注意的是如果要按⾏拼接,那么⾃然两个dataframe的列名,列数都是要相同的。另外⼀个同理。
相同的地⽅。我们经常会使⽤SQL提当然,如果你是纯拼接的,这样⼦当然OK,但是很多时候,出现的情况是两个待拼接的矩阵的列名有相同的地⽅
取我们想要的特征,不可能⼀个原始的表就能提供我们想要的所有信息,这个时候要在不同的数据表中提取,就会涉及到左连接,右连
左连接,右连接,内连接和外连接的情况。考虑到它们只是差别⼀个参数how,所以我们只解释这四个名词,就不举例⼦了。
接,内连接和外连接
Definition 1: Left/Right/Inner/Outer Join
左连接:表A, B连接只保留左表A的全部信息
右连接:表A, B连接只保留右表B的全部信息
内连接:表A, B连接只保留两表重合的信息
外连接:表A, B连接,除两表重合的信息外,列按序全部保留
详细的可以参考下⾯这篇⽂章
Pandas DataFrame连接表,⼏种连接⽅法的对⽐w ww.jianshu
4. 数据筛选
如果对⼏个简单的命令不熟悉,那么这也是⼀个脏活。这⾥我们单独举⼏个例⼦。
⾸先来看简单列表情况的。
Example 1:
出列表中⼤于等于3的数据,不改变表元素的顺序
学过循环的⼈马上开怀⼤笑,简单!
B
是,确实是⼀个不难的题⽬,可是Python有⼀个⾮常⼤的忌讳就是使⽤for循环
使⽤for循环。因为py的循环运⾏的很慢,所以实际我们的代码中会尽量避免写for循环(⼀般最多写⼀重循环,⼆重的说什么也得改成⼀重2333),所以如果数据量⼤⼀点,到了GB, TB级别的,这代码就该傻眼了。之前我们说的列表⽣成式其实本质上也是⼀种取代for循环的⼀个trick。
事实上,python有很多骚操作可以做⼀样的事情。
A
匿名函数lambda。你可以理解为filter就是把匿名函数施加到了每⼀个列表的元素中,达filter函数就可以完成这个任务,需要说明的是匿名函数
到“筛选”的⽬的。
如果是针对dataframe呢?我们⽤上⾯那个列表举例⼦。
A
很多⼈可能看不明⽩这个操作,我们看⼀下拆解代码后的结果。
A
也就是说,我们做的事情就是先通过逻辑表达式判断T/F,然后⽤T/F去做筛选。
这样⼦的话,⼜⼀个问题来了,我可不可以直接这样做。
A
Series结构,那虽然R语⾔是可以的,但是Python⾥⾯这样做是需要⼀些预处理的。需要注意
注意的是,这个操作如果针对的是pandas⾥的Series结构
么是没有问题的。但是针对dataframe是8⾏的……好,那么我们可不可以⾃⼰造⼀个Series呢?
A
这是不对的,两个数据结构之间的⽅法,操作等是泾渭分明的)。
其实Series就是⼀个仅有⼀列的dataframe(但是严格意义上来说这是不对的
注意:⼀个很⾃然的联想是,如果我希望选取⼀个区间,也就是说我需要两个条件来制约。⽐⽅说我希望寻值在[3, 4]的元素,那么有的注意
⼈可能会写成
A
这是会报错的。真正的写法应该是这样
但事实上这是会报错的
A1
这个谜题⾄今我不知道为什么……征个解了
征个解了,希望出没在评论区的⼤佬可以解答~
⾄于提到针对Series结构不太⼀样的原因,我们之后再提,先放在这⾥。
定点筛选。⽐⽅说下⾯这个业务需求。
除了这样的逻辑关系筛选,其实还有⼀种筛选就是定点筛选
Example 2:
在A这个dataframe中挑选出值为2和3的所有元素。
除了index(最左边那⼀列)外的其他列。
注意这⾥的“值”的意思就是value,也就是除了index(最左边那⼀列)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论