资讯专栏INFORMATION COLUMN

利用 Pandas 将数据集中的某列文本拆分为多行

BWrong / 1834人阅读

摘要:按照的要求我需要将的坐标拆分为多行。到这里相当于将列中所有文本拆成了一个巨大的表,表中每个单元格有一个值。有些行拆分后的元素比较少,没有值可以填充的单元格补充会把整个表逐行堆叠成一列。彩蛋我在列拆分为多行的基础上,还将拆分成了两个变量。

背景

手头的项目要求用 Tableau 创建一个 story,数据集是摩拜上海城区用户使用数据。其中有一个维度的数据处理起来有点棘手。

数据格式

注意 track 这个维度的数据,它表示的是在订单时间内的行车轨迹,里面包含了大量坐标点。

按照 tidydata 的要求:

Each variable forms a column.

Each observation forms a row.

Each type of observational unit forms a table.

我需要将 track 的坐标拆分为多行。

神来之笔

Google 了问题的解决方式,代码是

mobike.drop("track",axis = 1).join(mobike["track"].str.split("#",expand = True).stack().reset_index(level = 1,drop = True).rename("track"))
工作原理

解决问题不能光知其然,不知其所以然。所以我将这行代码逐语句进行了拆分,一探代码内部的工作原理。

最外层代码是:

mobike.join({dataset})

这里调用了 dataframe 的 join 方法,很基础。

{dataset} 这部分做的工作比较多,首先是 split 方法。Python 的 split 方法可以将字符串按照指定的字符进行分割,这个例子中指定的字符是「#」。如果不加参数 expand = Truesplit()会返回拆分后的字符串数组。

mobike["track"].str.split("#")
# ["121.372,31.118","121.372,31.119","121.373,31.117","1...]
# ["121.419,31.200","121.419,31.201","121.420,31.199","1...]
# ...

加了 expand = True 会将数组拆开,数组中的每一个元素都会多带带保存。

mobike["track"].str.split("#",expand = True)
# "121.372,31.118" "121.372,31.119" "121.373,31.117" "1... 
# "121.419,31.200" "121.419,31.201" "121.420,31.199" "1...
# ...

到这里相当于将列中所有文本拆成了一个巨大的表,表中每个单元格有一个值。有些行拆分后的元素比较少,没有值可以填充的单元格补充 None

stack() 会把整个表逐行堆叠成一列。

这样就成功的将一列中的所有文本拆分成了多行,而且它是一个 dataframe 。不过到这里还没有结束,我们还需要将拆出来的这个 dataframe 与原数据集合并。

注意到拆分出来的 dataframe 是多重索引的,需要用 reset_index() 将多重索引重置掉。在 split() 的时候,我们引入了超级多的 None。这时候就可以通过 reset_index(..., drop =True)将值为 None 的行删除。

与原数据集通过 join() 合并的时候,A.join(B),A、B两个 DataFrame 都需要有名字,因此需要 rename("track")

至此,我们的任务算做完了。

彩蛋

我在列拆分为多行的基础上,还将 track 拆分成了两个变量——track_x,track_y。这里用到了 pandas 的函数映射进行数据转换。

mobike["track" = mobike["track"].split(",")
mobike["track_x"] = mobike["track"].map(lambda x:x[0])
mobike["track_y"] = mobike["track"].map(lambda x:x[1])

通过 map 进行列的扩展速度非常非常快。

本文用到的摩拜数据及演示 notebook 均可在 DataWranglingMethod下载。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43164.html

相关文章

  • 数据科学系统学习】Python # 数据分析基本操作[四] 数据规整化和数据聚合与分组运算

    摘要:数据规整化清理转换合并重塑数据聚合与分组运算数据规整化清理转换合并重塑合并数据集可根据一个或多个键将不同中的行链接起来。函数根据样本分位数对数据进行面元划分。字典或,给出待分组轴上的值与分组名之间的对应关系。 本篇内容为整理《利用Python进行数据分析》,博主使用代码为 Python3,部分内容和书本有出入。 在前几篇中我们介绍了 NumPy、pandas、matplotlib 三个...

    The question 评论0 收藏0
  • Pandas技巧大全:含具体代码实现

    摘要:查看数据的基本统计信息。用处是用于数据读写处理更改提取等一系列操作的包,可以说,所有能实现的功能,都可以通过代码轻松实现,因此,对于学习非常重要。如果在里,需要翻到最低和最右,而且可能由于溢出无法穷尽可以简单的实现。 放在前面的话                         这学期刻意少...

    netmou 评论0 收藏0
  • 如何使用pandas对超大csv文件进行快速拆分详解

      小编写这篇文章的主要目的,主要是对pandas做一个较为详细的一个解答,pandas其实就是一个数据模型库,里面的内容还是比较的多的,那么,怎么样对海量的数据进行处理呢?处理的内容就是对超大的csv文件进行快速拆分,下面就给大家举例验证。  前言  本文介绍如何利用pandas对超大CSV文件进行快速拆分。  1.操作步骤  1.1安装pandas  pipinstallpandas  1.2...

    89542767 评论0 收藏0
  • Python数据分析入门之pandas总结基础(二)

    摘要:一大熊猫世界来去自如的老生常谈,从基础来看,我们仍然关心对于与外部数据是如何交互的。函数受限制问题唯一重要的参数,标志着一个的第个页将会被取出。数据分析入门之总结基础一欢迎来翔的博客查看完成版。 一.大熊猫世界来去自如:Pandas的I/O 老生常谈,从基础来看,我们仍然关心pandas对于与外部数据是如何交互的。 1.1 结构化数据输入输出 read_csv与to_csv 是⼀对...

    verano 评论0 收藏0

发表评论

0条评论

BWrong

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<