设为首页 加入收藏

TOP

pandas替换,加载,透视表(一)
2023-07-25 21:29:33 】 浏览:136
Tags:pandas 替换 加载

pandas的级联和合并

级联操作

  • pd.concat, pd.append

pandas使用pd.concat函数,与np.concatenate函数类似,只是多了一些参数:

objs
axis=0
keys
join='outer' / 'inner':表示的是级联的方式,outer会将所有的项进行级联(忽略匹配和不匹配),而inner只会将匹配的项级联到一起,不匹配的不级联
ignore_index=False
  • 匹配级联

    df1 = pd.DataFrame(data=np.random.randint(0,100,size=(5,3)),columns=['A','B','C'])
    df2 = pd.DataFrame(data=np.random.randint(0,100,size=(5,3)),columns=['A','D','C'])
    pd.concat((df1,df1),axis=1) #行列索引都一致的级联叫做匹配级联
    

    image-20221220101136858

  • 不匹配级联

    • 不匹配指的是级联的维度的索引不一致。例如纵向级联时列索引不一致,横向级联时行索引不一致

    • 有2种连接方式:

      • 外连接:补NaN(默认模式)

        pd.concat((df1,df2),axis=0) or pd.concat((df1,df2),axis=1, join='outer')
        

        image-20221220101306473

      • 内连接:只连接匹配的项

        pd.concat((df1,df2),axis=0,join='inner') #inner直把可以级联的级联不能级联不处理
        

        image-20221220101323124

        • 如果想要保留数据的完整性必须使用outer(外连接)

        • append函数的使用

  • append函数的使用

    df1.append(df1)
    

合并操作

  • merge与concat的区别在于merge需要依据某一共同列来进行合并
  • 使用pd.merge()合并时,会自动根据两者相同column名称的那一列,作为key来进行合并。
  • 注意每一列元素的顺序不要求一致
df1 = DataFrame({'employee':['regina','ivanlee','baby'],
                'group':['Accounting','Engineering','Engineering'],
                })
df2 = DataFrame({'employee':['regina','ivanlee','baby'],
                'hire_date':[2004,2008,2012],
                })


pd.merge(df1,df2,on='employee')

image-20221220101337828

一对多合并

df3 = DataFrame({
    'employee':['regina','ivanlee'],
    'group':['Accounting','Engineering'],
    'hire_date':[2004,2016]})

df4 = DataFrame({'group':['Accounting','Engineering','Engineering'],
                       'supervisor':['Carly','Guido','Steve']
                })
pd.merge(df3,df4)#on如果不写,默认情况下使用两表中公有的列作为合并条件

image-20221220101351869

多对多合并

df5 = DataFrame({'group':['Accounting','Engineering','HR'],
                'supervisor':['Carly','Guido','Steve']
                })

how 参数默认是inner,也可以是outer,right,left

image-20221220101446585

key的规范化

  • 当两张表没有可进行连接的列时,可使用left_on和right_on手动指定merge中左右两边的哪一列列作为连接的列

    df5 = DataFrame({'name':['ivanlee','zjr','liyifan'],
                    'hire_dates':[1998,2016,2007]})
    
    
    pd.merge(df1,df5,left_on='employee',right_on='name')
    

    image-20221220101503524

内合并与外合并:out取并集 inner取交集

人口分析项目

  • 需求:
    • 导入文件,查看原始数据
    • 将人口数据和各州简称数据进行合并
    • 将合并的数据中重复的abbreviation列进行删除
    • 查看存在缺失数据的列
    • 找到有哪些state/region使得state的值为NaN,进行去重操作
    • 为找到的这些state/region的state项补上正确的值,从而去除掉state这一列的所有NaN
    • 合并各州面积数据areas
    • 我们会发现area(sq.mi)这一列有缺失数据,找出是哪些行
    • 去除含有缺失数据的行
    • 找出2010年的全民人口数据
    • 计算各州的人口密度
    • 排序,并找出人口密度最高的州
#导入文件,查看原始数据
abb = pd.read_csv('../data/state-abbrevs.csv') #state(州的全称)abbreviation(州的简称)
area = pd.read_csv('../data/state-areas.csv') #state州的全称,area (sq. mi)州的面积
pop = pd.read_csv('../data/state-population.csv')#state/region简称,ages年龄,year时间,population人口数量

image-20221220101538312

#将人口数据和各州简称数据进行合并
abb_pop = pd.merge(abb,pop,left_on='abbreviation',right_on='state/region',how='outer') 必须保证数据完整
abb_pop.head()

image-20221220101657436

#将合并的数据中重复的abbreviation列进行删除
abb_pop.drop(labels='abbreviation',axis=1,inplace=True)

#查看存在缺失数据的列
#方式1:isnull,notll,any,all
abb_pop.isnull().any(axis=0)
#state,population这两列中是存在空值

image-20221220101852275

#1.将state中的空值定位到
abb_pop['state'].isnull()
#2.将上述的布尔值作为源数据的行索引
abb_pop.loc[abb_pop['state'].isnull()]#将state中空对应的行数据取出
#3.将简称取出
abb_pop.loc[abb_pop['state'].isnull()]['state/region']
#4.对简称去重
abb_pop.loc[abb_pop['state'].isnull()]['state/region'].unique()

#结论:只有PR和USA对应的全称数据为空值

image-20221220102446509

#为找到的这些state/region的state项补上正确的值,从而去除掉state这一列的所有NaN
#思考:填充该需求中的空值可不可以使用fillna?
    # - 不可以。fillna可以使用空的紧邻值做填充。fillna(value='xxx')使用指定的值填充空值
    # 使用给元素赋值的方式进行填充!
#1.先给USA的全称对应的空值
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇RP 点归入Set And Coupling 约束.. 下一篇Python从入门到精通(第2版)——..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目