首页 > 其他分享 >Pandas数据预处理Pandas合并数据集在线闯关_头歌实践教学平台

Pandas数据预处理Pandas合并数据集在线闯关_头歌实践教学平台

时间:2023-12-06 10:02:11浏览次数:88  
标签:state 预处理 头歌 result pd data2010 csv 数据 Pandas



Pandas数据预处理合并数据集

  • 第1关 Concat与Append操作
  • 第2关 合并与连接
  • 第3关 案例:美国各州的统计数据


第1关 Concat与Append操作

任务描述
本关任务:使用read_csv()读取两个csv文件中的数据,将两个数据集合并,将索引设为Ladder列,并将缺失值填充为0。

编程要求
data.csv和data1.csv是两份与各国幸福指数排名相关的数据,为了便于查看排名详情,所以需要将两份数据横向合并。数据列名含义如下:

Pandas数据预处理Pandas合并数据集在线闯关_头歌实践教学平台_数据分析

  • 读取step1/data.csv和step1/data1.csv两份数据;
  • 首先将两个数据横向合并;
  • 将索引设为排名(Ladder)列;
  • 填充空值为0;
  • 具体要求请参见后续测试样例。
  • 请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作!
测试说明
平台会对你编写的代码进行测试,对比你输出的数值与实际正确的数值,只有所有数据全部计算正确才能进入下一关。
测试输入:
无测试输入
预期输出:

Pandas数据预处理Pandas合并数据集在线闯关_头歌实践教学平台_numpy_02

import pandas as pd

def task1():
    #********** Begin **********#
    data=pd.read_csv('step1/data.csv')    
    data1=pd.read_csv('step1/data1.csv')  
    result=pd.concat([data,data1],axis=1) 
    result=result.T.drop_duplicates().T   
    result.index.name = 'Ladder'          
    result=result.fillna(0)

    #********** End **********#
    return result

第2关 合并与连接

任务描述
本关任务:使用pandas中的merge()函数按照编程要求合并三份数据。

编程要求
在实际应用中,经常会遇到数据需要连接但是数据源不同的情况,如以下两个数据:

  • mysql中查询的数据;
  • mongodb中查询的数据;
  • o\fracle中查询的数据;
我们需要分析不同城市的人对某个网页的点击次数,如果通过普通程序编写逻辑来实现肯定是可以做到的,但是当要连接的表超过十个,甚至百个时,这个方法就不好使了。这时使用pd.merge()来连接绝对是明智的选择。所以我们就来实践一下吧。

Pandas数据预处理Pandas合并数据集在线闯关_头歌实践教学平台_numpy_03

  • 将mysql、mongodb和o\fracle中的数据转换成DataFrame;
    mysql:

    mongodb:

    o\fracle:
  • 然后通过合并、连接、排序等操作,得到下图所示目标数组;
  • 具体要求请参见后续测试样例。
    提示:drop_duplicates()函数可以根据某一列来删除重复值。
    请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作!
测试说明
平台会对你编写的代码进行测试,对比你输出的数值与实际正确的数值,只有所有数据全部计算正确才能进入下一关。
测试输入:
无测试输入
预期输出:

Pandas数据预处理Pandas合并数据集在线闯关_头歌实践教学平台_数据可视化_04


开始你的任务吧,祝你成功!

import pandas as pd


def task2(dataset1,dataset2,dataset3):

    # ********** Begin **********#
    d1,d2,d3=pd.DataFrame(dataset1),pd.DataFrame(dataset2),pd.DataFrame(dataset3)
    result=pd.merge(d3,pd.merge(d1,d2,on='user_id',how='outer'),    left_on='id',right_on='user_id',how='outer')
    result['user_id']=result['user_id'].fillna(result['id'])
    result['page_click_count_y']=result['page_click_count_y'].fillna(result['page_click_count_x'])
    result['city_x']=result['city_x'].fillna(result['city_y'])
    result=result.drop(['id','page_click_count_x','city_y'],axis=1)
    result.rename(columns={'city_x':'city','page_click_count_y':'page_click_count'},inplace=True)
    result=result.sort_values(by="user_id")
    result['user_id']= result['user_id'].values.astype(int)
    
    # ********** End **********#
    return result

第3关 案例:美国各州的统计数据

任务描述
本关为练习关卡,请按照编程要求完成任务,获取美国各州2010年的人口密度排名。

编程要求

  • 使用read_csv()函数读取step3文件夹中的state-population.csv(pop)、state-areas.csv(areas)、state-abbrevs.csv(abbrevs)文件;
  • 合并pop和abbrevs。我们需要将pop的state/region列与abbrevs的abbreviation列进行合并,还需要通过how='outer’确保数据没有丢失,得到合并后的结果,发现有一个重复列需要删除,所以,删除abbreviation列;
  • 来全面检查一下数据是否有缺失,对每个字段逐行检查是否有缺失值,通过结果可知只有population和state列有缺失值;
  • 查看population这一列为缺失值的特征。通过结果可以得到好像所有的人口缺失值都出现在2000年之前的波多黎各,此前并没有统计过波多黎各的人口;
  • 从上面的结果可以发现state这一列也有缺失值,通过下列代码可以查看是哪些州有缺失值;
  • 我们可以快速解决这个问题:人口数据中包含波多黎各(PR)和全国总数(USA),但这两项没有出现在州名称缩写表中。我们可以用以下代码来填充对应的全称;
  • 然后我们用类似的规则将面积数据和处理完后的merged合并起来。数据合并的键为state,连接方式为左连接;
  • 检查缺失值,从结果中可以发现,area列中还有缺失值;
  • 查看是哪个地区面积缺失。结果如下:
  • 从上面的结果可以得出缺少的是全美国的面积数据,但是我们的目标数据并不需要全美国的面积数据,所以我们需要删掉这些缺失值;
  • 取year为2010年的数据,并将索引设为state列;
  • 计算人口密度,将2010年的人口population除以面积area (sq. mi);
  • 由于人口密度中分为成年人的人口密度和未成年人的人口密度,所以我们需要对两个值进行求合得到最终的人口密度;
  • 对值进行排序,取人口密度结果的前5名与倒数5名;
  • 具体要求请参见后续测试样例。
    请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作!
测试说明
平台会对你编写的代码进行测试,对比你输出的数值与实际正确的数值,只有所有数据全部计算正确才能进入下一关。
测试输入:
无测试输入
预期输出:

Pandas数据预处理Pandas合并数据集在线闯关_头歌实践教学平台_数据可视化_05


开始你的任务吧,祝你成功!

import pandas as pd
import numpy as np

def task3():
    #********** Begin **********#
    #读取三个csv文件
    pop = pd.read_csv('./step3/state-population.csv')
    areas = pd.read_csv('./step3/state-areas.csv')
    abbrevs = pd.read_csv('./step3/state-abbrevs.csv')
    # 合并pop和abbrevs并删除重复列
    merged = pd.merge(pop, abbrevs, how='outer',
    left_on='state/region', right_on='abbreviation')
    merged = merged.drop('abbreviation', 1)
    # 填充对应的全称
    merged.loc[merged['state/region'] == 'PR', 'state'] = 'Puerto Rico'
    merged.loc[merged['state/region'] == 'USA', 'state'] = 'United States'
    # 合并面积数据
    final = pd.merge(merged, areas, on='state', how='left')
    # 删掉这些缺失值
    final.dropna(inplace=True)
    # 取year为2010年的两种人口的数据
    data2010_1= final.query("year == 2010 & ages == 'total'")
    data2010_2=final.query("year == 2010 & ages == 'under18'")
    # 二者人口相加
    p=np.array(data2010_1.loc[:,'population'])+np.array(data2010_2.loc[:,'population'])
    data2010=data2010_1.copy()
    data2010.loc[:,'population']=p
    #设置州为索引
    data2010.set_index('state', inplace=True)
    #计算人口密度
    density = data2010['population'] / data2010['area (sq. mi)']
    # 对值进行排序
    density.sort_values(ascending=False, inplace=True)
    # 输出人口密度前5名和倒数5名
    print('前5名:')
    print(density[:5])
    print('后5名:')
    print(density[-5:])
    #********** End **********#


标签:state,预处理,头歌,result,pd,data2010,csv,数据,Pandas
From: https://blog.51cto.com/xiaokesong/8699774

相关文章

  • Pandas数据分析Pandas进阶在线闯关_头歌实践教学平台
    Pandas数据分析进阶第1关Pandas分组聚合第2关Pandas创建透视表和交叉表第1关Pandas分组聚合任务描述本关任务:使用Pandas加载drinks.csv文件中的数据,根据数据信息求每个大洲红酒消耗量的最大值与最小值的差以及啤酒消耗量的和。编程要求使用Pandas中的read_csv()......
  • Pandas数据分析Pandas初体验在线闯关_头歌实践教学平台
    Pandas数据分析初体验第1关了解数据处理对象--Series第2关了解数据处理对象-DataFrame第3关读取CSV格式数据第4关数据的基本操作——排序第5关数据的基本操作——删除第6关数据的基本操作——算术运算第7关数据的基本操作——去重第8关数据重塑第1关了解数据处理对象......
  • pandas concat 左右拼接 ignore_index 容易误以为是忽略index 其实是忽略列名
    pandasconcat左右拼接ignore_index容易误以为是忽略index其实是忽略列名`pandas.concat`函数的`ignore_index`参数是一个布尔值,用于控制是否在拼接轴上使用索引值¹²。如果`ignore_index=True`,则不会使用拼接轴上的索引值,结果轴将被标记为0,…,n-1¹²。这在你拼接......
  • 解释pandas.Series.rename_axis
    https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.rename_axis.html`pandas.Series.rename_axis`是一个用于设置索引或列轴名称的函数¹。以下是该函数的一些参数¹:-`mapper`:可选,标量或类似列表。用于设置轴名称属性的值。-`index`,`columns`:可选,标......
  • 解释 pandas.series.rename函数的每个参数
    `pandas.Series.rename`是一个用于更改Series索引标签或名称的函数¹。以下是该函数的一些参数¹:-`index`:可选,标量,可哈希序列,类似字典或函数。函数或类似字典的对象是应用于索引的转换。标量或可哈希的序列将改变Series的`name`属性¹。-`axis`:默认为0。未使用。需要此......
  • 头歌—密码学基础
    第1关:哈希函数题目任务描述本关任务:利用哈希算法统计每个字符串出现的个数。相关知识为了完成本关任务,你需要掌握:1.密码学哈希函数的概念及特性,2.安全哈希算法。密码学哈希函数的概念及特性我们需要理解的第一个密码学的基础知识是密码学哈希函数,哈希函数是一个数学函数,具......
  • 无涯教程-Erlang - 预处理
    在编译Erlang模块之前,它会由Erlang预处理程序自动处理,预处理器会扩展源文件中可能存在的所有宏,并插入任何必要的包含文件。通常,您不需要查看预处理器的输出,但是在特殊情况下(如,调试错误的宏时),您可能希望保存预处理器的输出,要查看模块some_module.erl的预处理输出,请提供OSShe......
  • Pandas学习之路【2】
    Pandas数据查询的5种方法:数据准备:importpandasaspdpath='C:\\Users\\zhang\\Desktop\\ant-learn-pandas-master\\datas\\beijing_tianqi\\beijing_tianqi_2018.csv'df=pd.read_csv(path)df.head() #默认的行索引为0,1,2...数字,但是此时我想把ymd......
  • 预处理组合数
    预处理组合数基本做法针对大多数仅仅是利用组合数求解问题的题目运用递推法打表,不仅方便,而且可以稳稳地控制复杂度,对于需要多次引用组合数的题目效果极佳:基于组合数公理性质:\[C^m_n=C^{n-m}_n\]推得:\[C^m_n=C^{m-1}_{n-1}+C^m_{n-1}\]由这个递推公式就可以熟练的写出组合......
  • Numpy数值计算Numpy 进阶在线闯关_头歌实践教学平台
    Numpy数值计算进阶第1关Numpy广播第2关Numpy高级索引第3关Numpy迭代数组第1关Numpy广播任务描述本关任务:给定两个不同形状的数组,求出他们的和。编程要求首先用arange()生成一个数组,然后用reshape()方法,将数组切换成4x3的形状,最后再与basearray相加,输出它们的和......