【Python Pandas】关于DataFrame行转列,转字典的尝试与记录(有代码和结果展示)

想要实现的数据处理是画出如下表格中,每个城市中的不同店铺随时间变化的支出曲线。
【Python Pandas】关于DataFrame行转列,转字典的尝试与记录(有代码和结果展示)_第1张图片

数据预处理

首先进行所有操作之前要进行数据预处理,对于城市和店铺这两列来说,它们只要不为空即可,处理的方式为:

import pandas as pd
df = pd.read_csv('test.csv')
df = df[df["城市"].notna()]
df = df[df["店铺"].notna()]

而对于最重要的两列数据时间和支出来说,需要筛选符合他们格式的数据,其他的一律视为记录错误剃掉,比如说支出这一列必须为数字,可以调用str.contains()进行正则化匹配:

df = df[df['CPU利用率'].str.contains('\d+.\d+|\d+')]

行转列

最开始的想法是找到pandas的内置函数将原始数据转换为如下表格(即行转列),然后按城市分类并根据时间排序后画图:
在这里插入图片描述
调用pandas内置函数实现行转列有如下两种方法:

  1. unstack()方法
    首先建立二级索引,将城市和店铺设置为索引:two_index = df.set_index(['城市','店铺'])
    然后调用unstack()方法将二级索引的行转列:new_df = two_index.unstack();
    此时报错为索引有重复的输入,原因为一级索引下的二级索引数据值必须是唯一的,而本数据特征决定了它不可能唯一,此方法暂不可用。
  2. pivot()方法
    pivot()方法不需要先建立二级索引,可直接调用实现行转列:pd.pivot(df, index="城市", columns="店铺", values="支出");但此时同样会报与unstack()方法一样的错误,理由同上,如果原始数据可以保证每个一级索引(城市)下的二级索引(店铺)唯一,则可用这两种方式实现快速行转列;

行转列后还需要调用以下函数进一步处理即可得到与上表相同的结果::

new_df = new_df.rename_axis(columns=None)
new_df = new_df.reset_index()

分组与转字典

直接调用pandas内置库函数无法实现需求,只能自己编写代码实现,首先调用groupby()函数对城市进行分组,然后取出每一类城市的分组数据,对其中的店铺再次分组,取出每一类店铺时间和支出数据以字典的形式记录下来并画图。
(代码之后补充)
最后可以得到如下结果,每个城市生成一张图片,图片中每条曲线表示不同店铺支出随时间的变化:
【Python Pandas】关于DataFrame行转列,转字典的尝试与记录(有代码和结果展示)_第2张图片

你可能感兴趣的:(数据分析,python,pandas,数据分析)