pandasTrans

#!/usr/bin/env python
# coding: utf-8

一、导入库

import numpy as np
import pandas as pd

二、读取文件

创建数据表

df = pd.DataFrame({'id':[1001,1002,1003,1004,1005,1006],
'birth':pd.date_range(start='20191001',periods=6,freq='D'),
'city':['beijing',' wuhan ','shangHai ','beijing ','Shanghai',' BEIJING'],
'age':[33,27,35,27,42,23],
'gender':['男','男','女','男','女','女'],
'education':['本科','高中','本科','本科','高中','本科'],
'salary':[6000,4000,5000,7000,np.nan,3500],
'like':['sing-apple','dance-banana','sing-orange','draw-apple','dance-orange','sing-banana']})
df.to_csv('data.csv', index=False)
# 读取csv文件
df_1 = pd.read_csv('data.csv')
df_1

三、查看数据表信息

1、查看数据维度

df_1.shape

2、查看数据基本信息(维度、列名称、数据格式、所占空间等)

df_1.info()
df_1.isnull().sum().sort_values(ascending=False)

3、每一列数据的格式

df_1.dtypes

4、某一列格式

df_1['id'].dtype

5、空值

df_1.isnull()

6、查看某一列空值

df_1['salary'].isnull()

7、查看某一列的唯一值

df_1['gender'].unique()

查看某一列值的分布

df_1['gender'].value_counts(dropna=False)

8、查看数据表的值

df_1.values

9、查看列名称

df_1.columns

10、查看前n行,后n行数据

df_1.head(4)
df_1.tail()

四、数据清洗

1、用数字0填充空值

df['salary'].fillna(value=0)
df_1

df_1['salary'].fillna(method='ffill')
df_1['salary'].fillna(method='bfill')
df_1

2、使用均值填充

df_1['salary'].fillna(df_1['salary'].mean(), inplace=True)
df_1

3、清除某一列的字符空格

' ABC '.strip()
df_1['city'][1]
df_1['city'] = df_1['city'].map(str.strip)
df_1['city'][1]

4、大小写转换

df_1['city'] = df_1['city'].str.lower()
df_1

5、更改数据格式

df_1['id'].astype('str')
df_1['id'].astype('int64')

6、更改列名称

df_1.rename(columns={'gender':'性别', 'age':'年龄'})

7、删除后出现的重复值

df_1['education'].drop_duplicates()

删除先出现的重复值

df_1['education'].drop_duplicates(keep='last')

8、数据替换

df_1['education'].replace('本科', '大学')
df_1

求北京地区、男性的平均年龄和薪资

df1=df_1.loc[((df_1['city'].map(str.strip) == 'beijing') & (df_1.gender == '男')) ].mean()
df1.age
df1=df_1.loc[((df_1['city'].map(str.strip) == 'beijing') & (df_1.gender == '男')) ].mean()
df1.salary
df_1

将上海地区员工工资涨20%

df_1['salary'] = df_1['salary'].fillna(method='bfill')
df_1
df_1.loc[(df_1['city'].map(str.strip).map(str.lower) == 'shanghai') ]

将上海地区、学历为本科的员工的工资 涨20%

df_1.loc[((df_1['city'].map(str.strip).map(str.lower) == 'shanghai') & (df_1.education == '本科')),'salary'] =
df_1.loc[(df_1['city'].map(str.strip).map(str.lower) == 'shanghai')& (df_1.education == '本科') ,'salary'].map(lambda x:x*1.2)
df_1

四、数据合并

df_2 = pd.DataFrame({'id':[1001,1002,1003,1004,1005,1007],
'height':[173,170,160,182,158,168],
'occupation':['程序猿','程序猿','测试','算法工程师','程序媛','程序员鼓励师'],
'married':['Y','N','N','Y','Y','N']})
df_2

1、数据表合并:merge,join,concat

1.1 merge

df_inner = pd.merge(df_1, df_2, on='id', how='inner') # 交集
df_inner
df_left = pd.merge(df_1, df_2, on='id', how='left')
df_left
df_right = pd.merge(df_1, df_2, on='id', how='right')
df_right
df_outer = pd.merge(df_1, df_2, on='id', how='outer')
df_outer

1.2 append

df_3 = pd.DataFrame({'id':[1008],
'height':[177],
'occupation':['程序猿'],
'married':['Y']})
result = df_2.append(df_3)
result
df_inner

2、设置索引列

df_inner.set_index('id')
df_inner.reset_index(drop=True)

3、按照特定列的值排序

df_inner.sort_values(by=['age'])

4、按照索引列排序

df_inner.sort_index()

5、如果salary列的值>=6000, level列显示high,否则显示low:

df_inner['level'] = np.where(df_inner['salary']>=6000, 'high', 'low')
df_inner

6、对复合多个条件的数据进行分组标记

df_inner.loc[(df_inner['salary']>=6000) & (df_inner['gender'] == '男'), 'sign'] = 1
df_inner

7、对like字段的值依次进行分列,并创建数据表,索引值为df_inner的索引列,列名称为art和fruit

df_split = pd.DataFrame((x.split('-') for x in df_inner['like']), index=df_inner.index, columns=['art','fruit'])
df_split

8、将完成分裂后的数据表和原df_inner数据表进行匹配

df_inner = pd.concat([df_inner, df_split], axis=1)
df_inner

五、数据提取

主要用到的2个函数:loc, iloc。loc函数按标签值进行提取,iloc按位置进行提取

df_inner

1、按索引行提取单行的数值

df_inner.loc[3]

2、按索引提取区域行数值

df_inner.iloc[0:3]

5、提取4日之前的所有数据

df_inner.loc[:'2019-10-04']

6、使用iloc按位置区域提取数据

df_inner.iloc[:3,:2]

7、使用iloc按位置单独提取数据

df_inner.iloc[[0,2],[4,5]]
df_inner

9、判断city列的值是否为北京

df_inner['city'].isin(['beijing'])

10、判断city列里面是否包含beijing和wuhan,然后将符合条件的数据提取出来

df_inner.loc[df_inner['city'].isin(['beijing','wuhan'])]

六、数据筛选

使用与、或、非三个条件配合大于、小于、等于对数据进行筛选,并进行计数和求和。

1、使用‘与’进行筛选

df_inner.loc[((df_inner['age']>30) & (df_inner['city']=='beijing')), ['age', 'gender']]

2、使用或进行筛选

|

3、使用非进行筛选

!=

4、对筛选后的数据按city列进行计数

df_inner.loc[df_inner['city']!='beijing'].city.count()

5、使用query函数进行筛选

df_inner.query('city == ["beijing", "wuhan"]')

6、对筛选后的结果按salary进行求和

df_inner.query('city == ["beijing", "wuhan"]').salary.sum()

七、数据汇总

主要函数是groupby

1、对所有列进行计数汇总

df_inner.groupby('city').count()

2、按城市对id字段进行计数

df_inner.groupby('city')['id'].count()

3、对两个字段进行汇总计数

df_inner.groupby(['city','gender'])['id'].count()
对city字段进行汇总并分别计算salary的合计和均值
df_inner.groupby('city')['salary'].agg([len, np.sum, np.mean])

八、数据统计

数据采样,计算标准差、协方差和相关系数

1、简单的数据采样

df_inner.sample(n=3)

2、手动设置采样权重

weights = [0,0,0,0.5,0.5]
df_inner.sample(n=2, weights=weights)

3、采样后不放回

df_inner.sample(n=3, replace=False)

4、采样后放回

df_inner.sample(n=4, replace=True)

5、数据表描述性统计

df_inner.describe().round(2).T

6、计算列的标准差

df_inner['salary'].std()

7、计算两个字段间的协方差

df_inner['salary'].cov(df_inner['age'])

8、数据表中所有字段间的协方差

df_inner.cov()

9、两个字段的相关性分析

df_inner['salary'].corr(df_inner['age'])

10、数据表的相关性分析

df_inner.corr()

posted @   冀未然  阅读(5)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示