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()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了