Python数据分析DAY5

目录

Pandas读取文件

CSV文件读取

         基本参数

        分块读入相关参数

        缺失值处理

               pandas分组聚合

                transform转换值 

                apply操作

                merge数据合并 

                drop_duplicates()去重函数 

                Pandas字符串操作 

                 三巨头map-apply-applymap


Pandas读取文件

        pandas提供多种读取数据的方法:read_csv() 用于读取文本文件,read_excel()用于读取文本文件,read_json()用于读取json文件,read_sql_query()读取sql语句.

  • CSV文件读取

        只需要记住csv文件是以逗号为分割的。

df=pd.read_csv("test.csv")
print(df,type(df))

         基本参数

                names:自行设置列名

                headers:设置表头是从哪一行开始的

                index_col:我们在读取文件之后所得到的DataFrame的索引默认是0、1、2……,我们可以通过set_index设定索引,但是也可以在读取的时候就指定某列为索引。

此时,birthday还是object的类型。我们可以使用pd.to_datetime(df.index)变成datetime类型。之后,使用df.index= pd.to_datetime(df.index)。

                
 之后,就可以使用df['2004']去查找。需要注意,可以选择多个作为行标签index_col=["gender"."birthday"]

                usecols:返回列的子集(你所需要的列)usecols=['name','birthday']

                encoding:设置编码格式,pandas默认是utf-8。

                dtype:指定读取的参数是什么格式的。dtype={“id”:str}表示让列名是id的以字符串的格式。

                converters:在读取数据的时候对数据进行变换,例如id增加10。在使用converters参数时,解析器默认所有列的类型为str。

                skiprows:表示过滤行,想要过滤哪些行,就写在一个列表里面传递给skiprows即可。skiprows=[0,3]。

                skipfooter:从文件末尾过滤行。skipfooter=1。

                nrows: 设置一次性读入的文件行数。nrows=3 只读三行。

                na_values:读参数可以配置哪些值需要处理成NaN。na_values=["女","朱梦雪"]

                parse_dates:将集合内所指定的列的数据变成时间格式。parse_dates=["birthday"]。

        分块读入相关参数

                iterator:迭代器, iterator 为 boo1类型,默认为False。如果为True,那么返回一个TextFileReader对象,以便逐块处理文件。这个在文件很大、内存无法容纳所有数据文件时,可以分批读入,依次处理。

chunk=pd.read_csv('data\students.csv',iterator=True)
print(chunk.get_chunk(2))#一次读取两行此时指针指向第三行
#如果还有数据可以给chunk赋更大的值,使数据一次性输出
#如果数据读取玩了,在读取就会报错因为指针已经指向末尾了

                 chunksize:设置文件块的大小。每次读取按块读取。

chunk=pd.read_csv('data\students.csv',chunksize=2)
#可以指定行数也可以不指定函数
print(chunk)
print(chunk.get_chunk(100))
        缺失值处理

                对于缺失值一般都是2中处理方式,要么删除要么填充。

                删除缺失值dropna()

#删除至少缺少一个元素的行
df.dropna()
#删除至少缺少一个元素的列
df.dropna(axis='columns')
#删除确实所有元素的行
df.dropna(how='all')
#仅保留至少有2哥非NA值的行
df.dropna(thresh=2)
#定义在那些列中查找缺少的值
df.dropna(subset=['toy'])
#在同一个变量中保留操作数据
df.dropna(inplace=True)

                缺失值补充fillna()

#将所有NaN元素替换成0
df.fillna(0)
#向前或向后传播非空值
df.fillna(method='ffill')
df.fillna(method='bfill')
#将A B C D 中所有的空按字典的值填充
values={"A":0,"B":1,"C":2,"D":3}
#只替换第一个NaN元素
df.fillna(0,limit=1)
#当使用数据填充时,替换会沿着相同的列名和索引进行
df2=pd.DataFrame(np.random.rand(4,4),columns=list("ABCD"))
df.fillna(value=df2)
               pandas分组聚合

                        分组聚合groupby()

                        如上图的数据,可以使用groupby()。对company进行分组,group=data.groupby("company")。之后可以使用list(group)查看数据。

                         聚合操作agg():聚合(Aggregation)操作是groupby后非常常见的操作,会写SQL的朋友对此应该是非常熟悉了。聚合操作可以用来求和sum、均值mean、最大值max、最小值min等。

#计算不同员工的平均年龄和平均薪水
data.groupby("company").agg('mean')
data.groupby("company").mean()
data.groupby('company').agg({"salary":'median',"age":'mean'})
                transform转换值 

                         如以上数据,需要在原数据集中新增一列平均工资。

#先求平均值在求出列
data.groupby('company').mean()['salary']
#先求出列再去平均值
data.groupby('company')['salary'].mean()
#as_index=False 是否将分组列作为索引列,默认是True
data[['salary','company']].groupby('company',as_index=False).mean()
#to_dict将表格中的数据变成字典格式
avg_salary_dict=data.groupby('company')['salary'].mean().to_dict
#map()函数可以用于Series对象或DataFrame对象的一列,
#接收函数作为或字典对象作为参数,返回经过函数或字典映射处理后的值。
data['avg_salary']=data['company'].map(avg_salary_dict)

                        如果使用transform的话,只需要一行代码:

data['avg_salary1'] = data.groupby('company')['salary'].transform('mean')
                apply操作

                        它相比agg和transform而言更加灵活,能够传入任意自定义的函数,实现复杂的数据操作对于groupby后的apply,以分组后的子DataFrame作为参数传入指定函数的,基本操作单位是DataFrame。

                        假设要实现获取各个公司年龄最大的员工的数据,该怎么实现呢?

def get_oldest_staff(x):
    df=x.sort_values(by='age',ascending=True)
    return df.iloc[-1]

oldest_staff=data.groupby('company',as_index=False).apply(get_oldest_staff)
oldest_staff

                merge数据合并 

                        merge的主要参数考虑left,right,how: str='inner',on=None,

情况一:一对一

#去两章表的交集 联合起来
df_1.merge(df_2,on='userid')

 情况二:一对多

pd.merge(df_1,df_2,on='userid')

左连接(右链接也相同):左侧的都显示,右侧如果左侧没有则显示空

pd.merge(df_1,df_2,how='left',on='userid')

 外连接:就是并集将所有连接的字段全部显示

                drop_duplicates()去重函数 

                        ‘去重”通过字面意思不难理解,就是删除重复的数据。在一个数据集中,找出重复的数据删并将其删除,最终只保存一个唯一存在的数据项,这就是数据去重的整个过程。删除重复数据是数据分析中经常会遇到的一个问题。通过数据去重,不仅可以节省内存空间,提高写入性能,还可以提升数据集的精确度,使得数据集不受依复数据的影响。

                Pandas字符串操作 

                        Python会处理字符串起来会很容易,作为工具包的Pandas同样可以简单快速的处理字符串,几乎把Python内置的字符串方法都给复制过来了,这种方法就是Pandas内置的str方法,通俗来说就可以将series和index对象中包含字符串的部分简单看作单个字符串处理,达到批量简单快速处理的目的。

                 三巨头map-apply-applymap

                        apply:应用于DataFrame的行或列中

                        applymap:应用在DataFrame的每一个元素

                        map:应用在Series单独一列的每一个元素

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值