pandas常用指令的详细解释,附代码和数据集
相关包的导入
使用的为pandas和numpy,两个包的关联系十分的大
import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
'''Python的警告信息有时候很烦人,特别是因为软件版本引起的警告,因此可以去掉python输出的警告'''
数据集的显示:
数据集采用网上的一个,共3333个样本,20个特征
df = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/telecom_churn.csv') #有参数限定,sep(分隔符),header(有无列名)
df.head() # 输出前五行的数据集
df.tail() # 输出后五行的数据集
查看数据集信息的相关代码:
- df.shape # 查看数据集的维度,显示为(3333,20)
- df.columns # 查看数据集的各特证名(即:列名)
- df. info() # 查看数据集的一些总体信息,包括(维度,列名,各列的数据类型以及是否有缺失值等)(常用)
df.info()
'''信息显示如下
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3333 entries, 0 to 3332
Data columns (total 20 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 State 3333 non-null object
1 Account length 3333 non-null int64
2 Area code 3333 non-null int64
3 International plan 3333 non-null object
4 Voice mail plan 3333 non-null object
5 Number vmail messages 3333 non-null int64
6 Total day minutes 3333 non-null float64
7 Total day calls 3333 non-null int64
8 Total day charge 3333 non-null float64
9 Total eve minutes 3333 non-null float64
10 Total eve calls 3333 non-null int64
11 Total eve charge 3333 non-null float64
12 Total night minutes 3333 non-null float64
13 Total night calls 3333 non-null int64
14 Total night charge 3333 non-null float64
15 Total intl minutes 3333 non-null float64
16 Total intl calls 3333 non-null int64
17 Total intl charge 3333 non-null float64
18 Customer service calls 3333 non-null int64
19 Churn 3333 non-null bool
dtypes: bool(1), float64(8), int64(8), object(3)
memory usage: 498.1+ KB'''
- df.describe() # 可以显示数值类型的特征值,以及对应特征的数值,均值,范围,标准差,四分位数(常用)
df.describe(include = [‘object’, ‘bool’]) # 也可以用include参数,显示对象和布尔类型的相关信息 - df[‘Churn’].value_counts() # value_count统计出现次数,其值为次数,按照从大到小,其索引为列表原先值。即 value为2850,其index 为False.
False 2850
True 483
Name: Churn, dtype: int64
数据集的排序
- 使用sort_value的方法,可以按照具体某一列,或者某几列进行排序
具体用法如下:
df.sort_values(by='Total day charge', ascending=False).head() # 按照某一列排序,采用降序,输出前五行
df.sort_values(by=['Churn', 'Total day charge'],
ascending=[True, False]).head()
# 按照两列排序,首先按照 'Churn'升序,对排列后的结果按照 'Total day charge'降序排列,输出前五行
- 对某些数据进行判断。筛选出我们想要的数据,这个时候需要我们给定一些条件
df[df['Churn'] == 1]['Total day minutes'].mean()
#先对churn == 1进行筛选,然后对 'Total day minutes'这一列求均值
df[(df['Churn'] == 0) & (df['International plan'] == 'No')
]['Total intl minutes'].max()
# 筛选条件有两个
数据集的获取
对数据集的获取,我们一般采用 loc和iloc用法,两个均是按照0开始。iloc是对行数或者列数进行索取,而loc是通过名称索引,也就是按照索引号获取
df.loc[0, :]
df.iloc[0, :]
'''两者获取的内容是一致的,都是以0开始,即使行索引的名字是其他。两者一般都可以互用,
但是有以下几种情况不可以'''
- 索引的值是乱序的时候,使用 iloc可以获取数据集,使用 loc会出错,但执行df.loc[range(m), :]会将索引值重新赋值。
- 想要保留索引值的时候,当其索引为非数字时,尽量使用iloc
函数应用到具体单元格,行,列
使用三个函数,apply(),map(),replace()等
- 相对某列数值进行变化,可以直接在后面运算
df[ 'Area code' ] = df[ 'Area code' ] * 2
- 使用apply函数
df[df['State'].apply(lambda state: state[0] == 'W')].head()
- map()函数
d = {'No': False, 'Yes': True}
df['International plan'] = df['International plan'].map(d)
- replace函数
d = {'No': False, 'Yes': True}
df = df.replace({'Voice mail plan': d})
- drop()函数,
df .drop(['Total charge', 'Total calls'], axis=1, inplace=True)
axis = 1 按照列,inplace = Ture 在原表上进行操作
表格的拼接:
可以直接相加,或者用insert,contact,append等方式
直接相加:
total_calls = df[‘Total day calls’] + df[‘Total eve calls’] +
df[‘Total night calls’] + df[‘Total intl calls’]
insert 方法
df.insert(loc=len(df.columns), column=‘Total calls’, value=total_calls)
contact 方法
df_bind = df.contact([df1,df2], axis = 1) # df1和df2为假设新的两个数据集
缺失值的处理
在做机器学习和数据挖掘方面时,对缺失值的处理十分的重要,其方式有许多种,删除,取平均值将其补充,取特定值将其补充,取邻近值将其补充。
dropna函数
df.**dropna**(self,axis = 0 ,how = 'any',inplace = False)
'''self不用填,axis = 0行,how = 'any'/ 'all' any是指出现一个缺失值,
all是整行都是缺失值,inplace就是对原来数据是否发生改变'''
findan函数
df['某列'] = df['某列'].**findna**(df['某列'].mean(), inplace = True)
# 用findna来替换缺失值,也可以使用具体数值。
数据集的导入导出
导入
pd.read_csv(''文件名", sep = ',' , header = 0, index_col = ,encoding = 'utf-8')
pd. read_table(''文件名", sep = '/t' , header = 0, index_col = ,
columns = ,encoding = 'utf-8')
pd.read_excel() # 参数很多,我就不介绍了
read_csv可以读取.txt文件,csv文件(excel也可以),sep分隔符,默认为逗号(常用分隔符为‘ ’(空格),’/t’(制表符), '/s+ '(s为空格,+代表一个或多个)),header列名,如果文件中保留第一行为列名,则为header = 0,如果文件中没有列名,则header = None,encoding编码模式,可以为gbk,utf-8,ansi。
(个人理解:一般windows输出到各个地方,不管是网页还是其他,使用utf-8,如果其他地方输送到windows,一般为gbk,而ansi用才读取函数读取excel表格比较常用到)
导出
导入和导出类似,函数如下:
pd.to_csv(’’‘数据集’,index = False, header = True) # 是否保留
pd.to_table(self, use_names_over_ids=False)
pd.to_excel(self, excel_writer, sheet_name=‘Sheet1’, na_rep=’’,
float_format=None, columns=None, header=True, index=True,
index_label=None, startrow=0, startcol=0, engine=None,
merge_cells=True, encoding=None, inf_rep=‘inf’, verbose=True,
freeze_panes=None)
结束语
本人还是菜鸟小白,把博客当做一种记录和分享的平台,如果有错误的,欢迎指出啊,共同学习,共同进步,喜欢的可以互相关注,评论,点赞,你们的支持会给我很多勇气,球球了。