pandas中isin的用法_pandas中isin的作用

       大家好,我很乐意和大家探讨pandas中isin的用法的相关问题。这个问题集合涵盖了pandas中isin的用法的各个方面,我会尽力回答您的疑问,并为您带来一些有价值的信息。

1.Python数据处理:筛选、统计、连表、拼接、拆分、缺失值处理

2.python(pandas模块)?

3.python数据标签分布是干啥的

4.怎么利用pandas做数据分析

Python数据处理:筛选、统计、连表、拼接、拆分、缺失值处理

       file1_path ='E:/Users/lenovo/Desktop/中视/622召回.csv' # 源数据

        格式:file1=pd.read_csv(file1_path)

        pd.read_csv(file1_path,encoding='gbk')

        pd.read_csv(file1_path,encoding='gbk',skiprows=[2,3])

       pd.read_csv(file1_path,encoding='gbk',skiprows=lambda x:x%2==1)

       pd.read_csv(file1_path,encoding='gbk',keep_default_na=False)

        new=pd.DataFrame()

        new.new[[0,1,2]]

        new.new[0:2]

        查询结果同上

        new.loc[new['激活数']>1000]

        loc和iloc的区别:

        ? loc:纯标签筛选

        ? iloc:纯数字筛选

        #筛选出new的某两列

        new=new.loc[:,['phone','收件人姓名']]

        #筛选new的第0,1列

        new.iloc[:,[0,1]]

       使用‘==’筛选-筛查“崔旭”的人(只能筛查指定明确的)

        #new=file1.loc[(file1['收件人姓名']=='崔旭')|(file1['收件人姓名']=='崔霞')]

        #print(new)

        #使用loc函数筛选-str.contains函数-筛查名字中包含'亮'和'海'的人

        #new=file1.loc[file1['收件人姓名'].str.contains('亮|海')]

        #print(new)

        #使用loc函数筛选-str.contains函数-筛查'崔'姓的人

        #new=file1.loc[file1['收件人姓名'].str.startswitch('崔')]

        #print(new)

        df = df[(df['DEPOSIT_PAY_TIME_x'] .notnull() ) & (df['DEPOSIT_PAY_TIME_x'] != "" )]

        print("during_time(number)=0的个数:",newdata[newdata['during_time(number)'] ==0].count()['during_time(number)'])

        print("during_time(number)=1,2,3的个数:",newdata[(newdata['during_time(number)'] >0) & (newdata['during_time(number)'] <4)].count()['during_time(number)'])

        print(newdata[newdata['during_time(number)'] ==0])

        newdata[newdata['Team']. isin (['England','Italy','Russia'])][['Team','Shooting Accuracy']]

        df.年龄.value_counts()

       1.修改指定位置数据的值(修改第0行,’创建订单数‘列的值为3836)

        new.loc[0,'创建订单数']=3836

        2.替换‘小明’-‘xiaoming’

        df.replace({'name':{'小明':'xiaoming'}})

       3.批量替换某一列的值(把‘性别’列里的男-male,女-felmale)

        方法一:df['性别']=df['性别'].map({'男':'male','女':'female'})

       方法二:df['性别'].replace('female','女',inplace=True)

        或df['性别']=df['性别'].replace('female','女') 这就是inplace的作用

        +df['性别'].replace('male','男',inplace=True)

        4.替换列索引

        df.columns=['sex','name','height','age']

        或者:df.rename(columns={'性别':'sex','姓名':'name','身高':'height','年龄':'age'})

        5.删除某一列

        del df['player']

       6. 删除某一列(方法二),删除某一行(默认axis=0删除行,为1则删除列)

        删除某一列(方法二)

        df.drop('性别',axis=1)

       删除某一行

        df.drop(1,axis=0)

       file1=pd.read_csv(file1_path)

        file2=pd.read_csv(file2_path)

        new1=pd.DataFrame()

        new1['phone']=file1['phone']

        new1['contact_time']=file1['contact_time']

        new2=pd.DataFrame()

        new2['phone']=file2['phone']

        new2['submission_audit_time']=file2['提交审核时间']

        newdata=pd.merge(new1,new2,on='phone',how='left')

        df=pd.concat([df1,df2],axis=0)

        4.2.2 横向表连接

        df=pd.concat([df1,df2],axis=1)

        df1['地区'].str.split('·',3,expand=True)

        df1:

       df1[['城市', '城区','地址']] = df1['地区'].str.split('·', 3, expand = True)

        5.1 缺失值删除

        data.dropna(axis=0,subset = ["Age", "Sex"]) ? # 丢弃‘Age’和‘Sex’这两列中有缺失值的行

        data.dropna(how = 'all') # 传入这个参数后将只丢弃全为缺失值的那些行

        data.dropna(axis = 1) ? # 丢弃有缺失值的列(一般不会这么做,这样会删掉一个特征)

        data.dropna(axis=1,how="all") ? # 丢弃全为缺失值的那些列

        5.2 缺失值填充:pandas.DataFrame.fillna()函数

        DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

        功能:使用指定方法填充NA/NaN值

        其中inplace=True就是直接在原有基础上填满

        5.3 缺失值查询:

        缺失值数量查询:df.isnull().sum()

        缺失值行查询:df[df.isnull().T.any()]

        newdata['during_time']=pd.to_datetime(newdata['submission_audit_time'])-pd.to_datetime(newdata['contact_time'])

        newdata['during_time(number)']=(pd.to_datetime(newdata['submission_audit_time'])-pd.to_datetime(newdata['contact_time'])).apply(lambda x: x.days)

        new=pd.DataFrame()

        new=newdata[newdata['during_time(number)'] ==0]

        new.to_csv(save_path,encoding='utf-8-sig')

        将数据按行拆分并存储到不同的csv文件中:

        path='C:/Users/EDZ/Desktop/工作/2021.08.19/'

       for i in range(0,30):

        df.loc[[i]].to_csv(path+str(i)+'.csv',encoding='gbk')

        df = df[['购药日期', '星期','社保卡号','商品编码', '商品名称', '销售数量', '应收金额', '实收金额' ]]

python(pandas模块)?

        将Excel中的的数据读入数据框架DataFrame后,可以非常方便的进行各种数据处理。

        21.1 列间求和

        求总分(总分=语文+数学+英语)

        对于上一章所提到的学生成绩表,仅用一个语句即可完成总分计算,并填充。

        df['总分']=df['语文']+df['数学']+df['英语']

        完整代码如下:

        from pandas import read_excel

        file='d:/student.xlsx' #见第18章表18-1

        df=read_excel(file,sheet_name=0,converters={'学号':str})

        df['总分']=df['语文']+df['数学']+df['英语']

        print(df.head()) #df.head()的作用是仅显示5行记录。

        运行结果如下:

        序号 学号 姓名 年级 班级 语文 数学 英语 总分 名次

        0 1 070101 王博宇 NaN NaN 84 71 93 248 NaN

        1 2 070102 陈冠涛 NaN NaN 89 89 89 267 NaN

        2 3 070103 李文博 NaN NaN 89 72 76 237 NaN

        3 4 070204 姜海燕 NaN NaN 89 89 89 267 NaN

        4 5 070205 林若溪 NaN NaN 91 95 83 269 NaN

        21.2替换

        既可以将对满足条件的行和列的数据替换,也可以对整个集合的数据按照条件进行替换。

        df['总分'].replace(310,'x',inplace=True)

        将总分列的数值“310”替换为“x”。inplace=True表示改变原数据。

        df.replace(76,0,inplace=True)

        将整个DataFrame中的数值“76”替换为“0”。

        df.replace([98,76,99],0,inplace=True)

        将整个DataFrame中的数值“98,76,99”一次替换为“0”。

        21.2排序

        既可以将某一列作为关键字段排序,也可以将几个列分别作为主、次关键字段进行排序。排序既可以按升序排序,也可以按降序排序。

        函数sort_values()的语法格式如下:

        df.sort_values(by=[“col1”,”col2”,......,”coln”],ascending=False)

        其中,coln表示列名,也可以是列名的列表;ascending表示排序方式,值为True表示升序,可以省缺,值为False表示降序。

        如:

        df=df.sort_values(by=['总分'],ascending=False)

        表示按照“总分”从高到低排序。

        df=df.sort_values(by=['总分','语文'],ascending=False)

        表示按照“总分”从高到低排序,若“总分”相同,再按照“语文”成绩从高到低排序。

        21.3 字段截取

        函数slice()可以从某列中截取字符串。格式如下:

        slice(start,stop)

        其中,start表示开始位置;stop表示结束位置

        例:

        df['年级']=df['学号'].str.slice(0,2)

        通过此语句可以截取学号字段的第1、2个字符,并赋值给年级字段。

        21.4 记录抽取

        可以抽取满足条件的记录。

        例:抽取总分>300的记录。

        df[df.总分>300]

        抽取总分在300到310之间(包括300和310)的记录。

        df[df.总分.between(306,310)]

        抽取学号中包含“0803”的记录。这样可以非常方便的抽取某个班的信息。

        df[df.学号.str.contains('0803',na=False)]

        此处的na=False,含义是如遇到NaN这样的数据,直接做不匹配处理。

        21.5修改记录

        1、整列替换

        我们在前面已经给整列填充过数据,填充时原来的数据就被覆盖了。

        即如下语句:

        df['总分']=df['语文']+df['数学']+df['英语']

        2、个别修改

        如将值‘99’替换为值‘100’,可用如下语句:

        df.replace('99','100')

        将指定列的值替,如将语文列和英语列的值‘99’替换为值‘100’,可用如下语句:

        df.replace({'语文':99,'英语':99},100)

        可用如下程序去验证:

        from pandas import read_excel

        file='d:/student.xlsx'

        df=read_excel(file,sheet_name=0,converters={'学号':str})

        print(df[(df.语文==99) |(df.英语==99)])

        df=df.replace({'语文':99,'英语':99},100)

        print(df[(df.语文==99) |(df.英语==99)])

        运行结果为:

        序号 学号 姓名 年级 班级 语文 数学 英语 总分 名次

        28 29 090802 丁能通 09 NaN 119 120 99 338 NaN

        29 30 090203 沈丹妮 09 NaN 109 108 99 316 NaN

        Empty DataFrame

        Columns: [序号, 学号, 姓名, 年级, 班级, 语文, 数学, 英语, 总分, 名次]

        Index: []

        可以看出,第一个print()语句输出的结果中满足条件“语文或英语为99分”的有两条记录,替换语句执行以后,df中再没有满足条件“语文或英语为99分”的记录了。

        21.6记录合并

        函数concat()()的格式如下:

        concat([dataFrame1,dataFrame2,......],ignore_index=True)

        其中,dataFrame1等表示要合并的DataFrame数据集合;ignore_index=True表示合并之后的重新建立索引。其返回值也是DataFrame类型。

        concat()函数和append()函数的功能非常相似。

        例:

        import pandas #导入pandas模块

        from pandas import read_excel #导入read_execel

        file='d:/student.xlsx' #变量file表示文件路径,注意'/'的用法 数据见第18章表18-1

        df=read_excel(file,sheet_name=0,converters={'学号':str})

        # 将Excel文件导入到DataFrame变量中

        df=df[:5] #截取df的前5个记录

        print(df) #输出df

        df1=df[:3] #截取df的前3个记录存入df1中

        df2=df[3:5] #截取df的最后2个记录存入df2中

        df3=pandas.concat([df2,df1]) #将df2与df1合并存入df3中

        print(df3) #输出df3

        运行结果如下:

        序号 学号 姓名 年级 班级 语文 数学 英语 总分 名次

        0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN

        1 2 070102 陈冠涛 NaN NaN 89 89 89 NaN NaN

        2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN

        3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN

        4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN

        序号 学号 姓名 年级 班级 语文 数学 英语 总分 名次

        3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN

        4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN

        0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN

        1 2 070102 陈冠涛 NaN NaN 89 89 89 NaN NaN

        2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN

        由于合并时是将df1合并到df2中,可以看出,索引仍然保持原来的状态。

        21.7统计次数

        可以用如下方法统计出某个值在某行或者某个范围出现的次数。

        from pandas import read_excel

        file='d:/student.xlsx'

        df=read_excel(file,sheet_name=0,converters={'学号':str})

        df=df[:5]

        print(df)

        print(df['语文'].value_counts())

        输出结果如下:

        序号 学号 姓名 年级 班级 语文 数学 英语 总分 名次

        0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN

        1 2 070102 陈冠涛 NaN NaN 89 89 89 NaN NaN

        2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN

        3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN

        4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN

        89 3

        84 1

        91 1

        Name: 语文, dtype: int64

        可以看出,通过value_counts()函数可以统计出列中各值出现的次数。

        value_counts()函数的参数还有 :

        ascending,当ascending=True时升序排列,当ascending=False时升序排列(此时该参数可省缺);

        normalize,当normalize=True时,显示的不再是各值出现的次数,而是占比。

        将上例中的语句print(df['语文'].value_counts())改为:

        print(df['语文'].value_counts(ascending=True,normalize=True))

        则输出结果变成了:

        91 0.2

        84 0.2

        89 0.6

        Name: 语文, dtype: float64

        21.8按值查找

        print(df['语文'].isin([84,91]))

        它的作用是查找‘语文’列中值和isin所指的列表中元素一致的记录,如果找到结果为True,否则为False。

        输出结果:

        0 True

        1 False

        2 False

        3 False

        4 True

        Name: 语文, dtype: bool

        21.9数据分区

        根据某个分区标准,将数据按照所属区域进行划分,并用相应的标签表示,可以用cut()方法来实现。

        语法格式如下:

        cut(series, bins, right=True, labels=NULL)

        其中:

        series表示需要分组的数据;

        bins表示分组的依据,是一个列表,其元素为划分分区的边界值,如[0,72,96,120],就是划分3个分区,即0~72、72~96、96~120,默认的是“左包右不包”;

        right表示分组时右边是否闭合;

        labels表示分组的自定义标签,也可以不重新定义。

        下面对上述学生成绩表中的语文成绩进行分组,并增加一个新的列“语文等级”。

        import pandas as pd

        from pandas import read_excel #导入read_execel

        file='d:/student.xlsx'

        df=read_excel(file,sheet_name=0,converters={'学号':str})

        df['年级']=df['学号'].str.slice(0,2)

        df['班级']=df['学号'].str.slice(0,4)

        df.总分=df.语文+df.数学+df.英语

        bins=[0,72,96,max(df.语文)+1] #

        lab=['不及格','及格','优秀']

        grade=pd.cut(df.语文,bins,right=False,labels=lab)

        df['语文等级']=grade

        print(df.head())

        print("语文成绩分等级统计结果:")

        print(df['语文等级'].value_counts())

        运行结果如下:

        序号 学号 姓名 年级 班级 语文 数学 英语 总分 语文等级

        0 1 070101 王博宇 07 0701 84 71 93 248 及格

        1 2 070102 陈冠涛 07 0701 89 89 89 267 及格

        2 3 070103 李文博 07 0701 89 72 76 237 及格

        3 4 070204 姜海燕 07 0702 89 89 89 267 及格

        4 5 070205 林若溪 07 0702 91 95 83 269 及格

        语文成绩分等级统计结果:

        及格 17

        优秀 10

        不及格 4

        Name: 语文等级, dtype: int64

python数据标签分布是干啥的

       1.什么是pandas? numpy模块和pandas模块都是用于处理数据的模块。 numpy主要用于针对数组进行统计计算,处理数字数据比较方便。 pandas除了可以处理数字数据,还可...

怎么利用pandas做数据分析

       一般是根据分析目的,将数据进行分组,研究各组别分布规律的一种分析方法。数据分组方式有两种:等距或不等距分组。

       分布分析在实际的数据分析实践中应用非常广泛,常见的有用户性别分布,用户年龄分布,用户消费分布等等。

       本文将进行如下知识点讲解:

       1.数据类型的修改

       2.新字段生成方法

       3.数据有效性校验

       4.性别与年龄分布

       分布分析

       1.导入相关库包

       import pandas as pd

       import matplotlib.pyplot as plt

       import math

       2.数据处理

       >>> df = pd.read_csv('UserInfo.csv')

       >>> df.info()

       RangeIndex: 1000000 entries, 0 to 999999

       Data columns (total 4 columns):

       UserId 1000000 non-null int64

       CardId 1000000 non-null int64

       LoginTime 1000000 non-null object

       DeviceType 1000000 non-null object

       dtypes: int64(2), object(2)

       memory usage: 30.5+ MB

       由于接下来我们需要做年龄分布分析,但是从源数据info()方法可知,并无年龄字段,需要自己生成。

       # 查看年龄区间,进行分区

       >>> df['Age'].max(),df['Age'].min()

       # (45, 18)

       >>> bins = [0,18,25,30,35,40,100]

       >>> labels = ['18岁及以下','19岁到25岁','26岁到30岁','31岁到35岁','36岁到40岁','41岁及以上']

       >>> df['年龄分层'] = pd.cut(df['Age'],bins, labels = labels)

       3.计算年龄

       由于数据来源于线下,并未进行数据有效性验证,在进行年龄计算前,先针对数据进行识别,验证。

       # 提取出生日期:月和日

       >>> df[['month','day']] = df['DateofBirth'].str.split('-',expand=True).loc[:,1:2]

       # 提取小月,查看是否有31号

       >>> df_small_month = df[df['month'].isin(['02','04','06','09','11'])]

       # 无效数据,如图所示

       >>> df_small_month[df_small_month['day']=='31']

       # 统统删除,均为无效数据

       >>> df.drop(df_small_month[df_small_month['day']=='31'].index,inplace=True)

       # 同理,校验2月

       >>> df_2 = df[df['month']=='02']

       # 2月份的校验大家可以做的仔细点儿,先判断是否润年再进行删减

       >>> df_2[df_2['day'].isin(['29','30','31'])]

       # 统统删除

       >>> df.drop(df_2[df_2['day'].isin(['29','30','31'])].index,inplace=True)

       # 计算年龄

       # 方法一

       >>> df['Age'] = df['DateofBirth'].apply(lambda x : math.floor((pd.datetime.now() - pd.to_datetime(x)).days/365))

       # 方法二

       >>> df['DateofBirth'].apply(lambda x : pd.datetime.now().year - pd.to_datetime(x).year)

       4.年龄分布

       # 查看年龄区间,进行分区

       >>> df['Age'].max(),df['Age'].min()

       # (45, 18)

       >>> bins = [0,18,25,30,35,40,100]

       >>> labels = ['18岁及以下','19岁到25岁','26岁到30岁','31岁到35岁','36岁到40岁','41岁及以上']

       >>> df['年龄分层'] = pd.cut(df['Age'],bins, labels = labels)

       由于该数据记录的是用户登录信息,所以必定有重复数据。而Python如此强大,一个nunique()方法就可以进行去重统计了。

       # 查看是否有重复值

       >>> df.duplicated('UserId').sum() #47681

       # 数据总条目

       >>> df.count() #980954

       分组后用count()方法虽然也能够计算分布情况,但是仅限于无重复数据的情况。而Python这么无敌,提供了nunique()方法可用于计算含重复值的情况

       Pandas是Python下一个开源数据分析的库,它提供的数据结构DataFrame极大的简化了数据分析过程中一些繁琐操作。

       1. 基本使用:创建DataFrame. DataFrame是一张二维的表,大家可以把它想象成一张Excel表单或者Sql表。Excel 2007及其以后的版本的最大行数是1048576,最大列数是16384,超过这个规模的数据Excel就会弹出个框框“此文本包含多行文本,无法放置在一个工作表中”。Pandas处理上千万的数据是易如反掌的sh事情,同时随后我们也将看到它比SQL有更强的表达能力,可以做很多复杂的操作,要写的code也更少。

       说了一大堆它的好处,要实际感触还得动手码代码。首要的任务就是创建一个DataFrame,它有几种创建方式:

       (1)列表,序列(pandas.Series), numpy.ndarray的字典

       二维numpy.ndarray

       别的DataFrame

       结构化的记录(structured arrays)

       (2)其中,二维ndarray创建DataFrame,代码敲得最少:

       import pandas as pd

       import numpy as np

       df = pd.DataFrame(np.random.randn(10, 4))

       df

        0 1 2 3

       0 0.927474 0.127571 1.655908 0.570818

       1 -0.425084 -0.382933 0.468073 -0.862898

       2 -1.602712 -0.225793 -0.688641 1.167477

       3 -1.771992 -0.692575 -0.693494 -1.063697

       4 -0.456724 0.371165 1.883742 -0.344189

       5 1.024734 0.647224 1.134449 0.266797

       6 1.247507 0.114464 2.271932 -0.682767

       7 -0.190627 -0.096997 -0.204778 -0.440155

       8 -0.471289 -1.025644 -0.741181 -1.707240

       9 -0.172242 0.702187 -1.138795 -0.112005

       (3)通过describe方法,可以对df中的数据有个大概的了解:

       df.describe()

        0 1 2 3

       count 10.000000 10.000000 10.000000 10.000000

       mean -0.189096 -0.046133 0.394722 -0.320786

       std 1.027134 0.557420 1.258019 0.837497

       min -1.771992 -1.025644 -1.138795 -1.707240

       25% -0.467648 -0.343648 -0.692281 -0.817865

       50% -0.307856 0.008734 0.131648 -0.392172

       75% 0.652545 0.310266 1.525543 0.172096

       max 1.247507 0.702187 2.271932 1.167477

       2. 改变cell。

       3. group by。

       4. 读写文件。

       好了,关于“pandas中isin的用法”的话题就到这里了。希望大家通过我的介绍对“pandas中isin的用法”有更全面、深入的认识,并且能够在今后的实践中更好地运用所学知识。