栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Pandas数据(去重、筛选、匹配)及plt绘图

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Pandas数据(去重、筛选、匹配)及plt绘图

以下是记录自己数据分析的一次历程,包括使用pandas进行数据去重、筛选、合并、获取目录内容进行匹配,其中遇到了数据表的存储和重新获取以固定表结构。包括两个表的合并,合并后数据字段的修改、筛选。最后将结果使用Matplotlib进行绘图,分别绘制柱状图和饼状图,过程中遇到如何显示中文标签,柱状图数目,如何优化图像等问题并逐一解决。

1. 数据去重

import numpy
import pandas as pd
data = pd.read_excel('data.xlsx')
#按照name1,name2,time进行去重
data.drop_duplicates(subset=['name1','name2','time'],keep='first',inplace=True)

2. 筛选出现两次及以上

#获取数据,某一列数据出现2次及以上
df = data.groupby('name2 ').filter(lambda x: len(x) > 1)

3. 按照指令列的值进行排序

#按照某两列值排序
df.sort_values(by=['name2','tiem'])

4. 获取某个属性数据最后一列

#数据保存,得到新表df1
df1 = df.sort_values(by=['name1','time'])
df1.to_excel('D:/Notebook/data1.xlsx',index = False)
df1 = pd.read_excel('D:/Notebook/data1.xlsx')

#读取并获得排序后的每一个数据最后一个
df2 = pd.read_excel('D:/Notebook/data1.xlsx')
df2.drop_duplicates(subset=['name1'],keep='last',inplace=True)
df2.to_excel('D:/Notebook/result.xlsx',index = False)
df2 = pd.read_excel('D:/Notebook/result.xlsx')

5. 关键词匹配

#关键词匹配
import os
import numpy as np
dir = "D:/Notebook/keywords/"
keywordfilenames = []
for filename in os.listdir(dir):
    if filename.endswith(".csv"):
        keywordfilenames.append(filename)
    else:
        continue
keyworddict = {}
for fname in keywordfilenames:
    keyworddict[fname.split(".")[0]] = np.concatenate(pd.read_csv(dir + fname).values)
npdata = df2.values
projs = []
for item in npdata:
    s = ""
    for ggc, cz in keyworddict.items():
        count = 0
        for kz in cz:
            try:
                if item[5].find(kz) != -1:
                    count += 1
            except:
                pass
        if count != 0:
            s = ggc
    projs.append(s)
print(projs)

7. 匹配结果写入表格

df2["dw"] = pd.DataFrame(projs)

8. 两个结果表,按照某一列进行合并,并提取需要字段 

o2o_merge = pd.merge(df1, df2, on = ['name2'], how='left')
result = o2o_merge[['name1','name2','name3']]

9. 合并结果字段名称修改

result.rename(columns={'name1':'a','name2':'b','name3':'c'},inplace=True)

10. 数据筛选,得到想要结果

#数据筛选,得到想要结果
import os
#获取当前月和日
import datetime
i = datetime.datetime.now()
os.mkdir('D:/Notebook/{}'.format(i.month,i.day))
xz = result.loc[result['dw']=='xz']
print('xz')
print(xz)
bb = result.loc[result['dw']=='bb']
print('bb')
print(bb)
xuzhou.to_excel('D:/Notebook/0428/xz.xlsx',index = False)
bengbu.to_excel('D:/Notebook/0428/bb.xlsx',index = False)

11. 获取条目数和去重结果 

total = result.loc[result['dw'] != '']['name1'].count()
people = len(result.loc[result[‘dw'] != '']['name1'].unique())

12. 结果绘制柱状图 

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
#显示中文
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
x = ['xz','bb']
y = [len(xz['name1'].unique()),len(bb['name1'].unique())]
index = np.array(x)
plt.title('{}月{}日分布情况(人数)'.format(i.month,i.day))
# plt.xlabel('人数')
plt.ylabel('人数')
#显示标签数量
plt.bar(x=index, height=y, width=0.5, bottom=0, color='red')
for a,b in zip(x, y):
    plt.text(a,b,
             b,
             ha='center',
             va='bottom',fontsize=10)
plt.show()
#图像优化
plt.style.use('ggplot')

 13. 结果绘制饼状图 

plt.axes(aspect=1)
plt.pie(y,labels=x,autopct='%.2f%%')
plt.title(' {}月{}日分布'.format(i.month,i.day))
plt.show()

备注:

比对表data1的某一列是否出现在表data2的某一列

data1[data1['name'].isin(data2['name'])]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839885.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号