pandas 去重_入门pandas(二)

b330e5af3fc4654deac221a289fd53a0.png

Pandas 是 Python 的外部模块,它非常像 Excel,提供了分析数据的功能。它提供了两个数据类型 Series 和 DataFrame。

pandas(Python Data Analysis Library)是基于numpy的数据分析模块,提供了大量标准数据模型和高效操作大型数据集所需要的工具,可以说pandas是使得Python能够成为高效且强大的数据分析环境的重要因素之一。

什么是 Series?

Series 是 Pandas 提供的一种数据类型,你可以把它想象成 Excel 的一行或一列。

import numpy as np
import pandas as pd

# 创建 Series,pandas 自动创建 index
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)

什么是 DataFrame?

DataFrame 是 Pandas 提供的一种数据类型,你可以把它想象成 Excel 的表格。

import numpy as np
import pandas as pd

# 创建数据集
data = np.random.randn(6, 4)

# 创建 DataFrame
df = pd.DataFrame(data)
print(df)

Panel

带标签且大小可变的三维数组(不常用)。

分布分析法,一般是根据分析目的,将数据进行分组,研究各组别分布规律的一种分析方法。数据分组方式有两种:等距或不等距分组。

搭建基本环境

import pandas as pd
import matplotlib.pyplot as plt
import math

//数据处理:

>>> df = pd.read_csv('UserInfo.csv')
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000000 entries, 0 to 999999
Data columns (total 4 columns):
UserId        1000000 non-null int64
CardId        1000000 non-null int64
LoginTime     1000000 non-null object
DeviceType    1000000 non-null object
dtypes: int64(2), object(2)
memory usage: 30.5+ MB

生产年龄字段

# 提取出生日期需要先把身份证号码转换成字符串
>>> df['CardId'] = df['CardId'].astype('str')

# 提取出生日期,并生成新字段
>>> df['DateofBirth'] = df.CardId.apply(lambda x : x[6:10]+"-"+x[10:12]+"-"+x[12:14])

# 提取性别,待观察性别分布
>>> df['Gender'] = df['CardId'].map(lambda x : 'Male' if int(x[-2]) % 2 else 'Female')

>>> df.head()

计算与分析

# 提取出生日期:月和日
>>> df[['month','day']] = df['DateofBirth'].str.split('-',expand=True).loc[:,1:2]

# 提取小月,查看是否有31号
>>> df_small_month = df[df['month'].isin(['02','04','06','09','11'])]

# 无效数据,如图所示
>>> df_small_month[df_small_month['day']=='31']

# 统统删除,均为无效数据
>>> df.drop(df_small_month[df_small_month['day']=='31'].index,inplace=True)

# 同理,校验2月
>>> df_2 = df[df['month']=='02']

# 2月份的校验大家可以做的仔细点儿,先判断是否润年再进行删减
>>> df_2[df_2['day'].isin(['29','30','31'])]

# 统统删除
>>> df.drop(df_2[df_2['day'].isin(['29','30','31'])].index,inplace=True)

90bf7198b45c3ea4d7c5b7276677f82f.png
# 计算年龄
# 方法一
>>> df['Age'] = df['DateofBirth'].apply(lambda x : math.floor((pd.datetime.now() - pd.to_datetime(x)).days/365))

# 方法二
>>> df['DateofBirth'].apply(lambda x : pd.datetime.now().year - pd.to_datetime(x).year)

年龄分布

# 查看年龄区间,进行分区
>>> df['Age'].max(),df['Age'].min()
# (45, 18)

>>> bins = [0,18,25,30,35,40,100]
>>> labels = ['18岁及以下','19岁到25岁','26岁到30岁','31岁到35岁','36岁到40岁','41岁及以上']

>>> df['年龄分层'] = pd.cut(df['Age'],bins, labels = labels)

由于该数据记录的是用户登录信息,所以必定有重复数据。而Python如此强大,一个nunique()方法就可以进行去重统计了。

# 查看是否有重复值
>>> df.duplicated('UserId').sum()    #47681

# 数据总条目
>>> df.count()    #980954
什么是 Pandas?_千里之行始于足下-CSDN博客_pandas什么意思​blog.csdn.net
84c81b4dcafe2e6a1fbad7acded366cb.png
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值