先写数据帧吧
importpandasaspdimportnumpyasnptest _ dict={ ' id ' : [ 1,2,3,4,5,6 ],' name':['sdtd ',' Bob,]
1 .查看数据显示dataframe的简要摘要。 这包括每列中非空值的数量df.info (也包括在内)
#返回每列数据的有效说明统计信息df.describe ()
#查看各列的索引号和标签for i,vinenumerate(df.columns ) : print(i ) I,v )
loc[]和iloc[]这两个函数都是用于在数据框中查找数据的函数,简单来说就是他们的区别
loc[]传递了行、列的名称,如loc[‘第几行’、‘其列’]
iloc[]传递行、列的索引。 例如,iloc[],1是第二行,第二列
ps: ': '表示所有行或列
选择从#‘id’到‘math’的所有列df_means=df.loc[:‘id’:’math’] #被指派给iloc [ :12 ]
#要选择多个不连续的列,请选择importnumpyasnpdf _ max=df.iloc [ :NP.r _ [ 0:1,4 ] df _ max2.有关处理缺少数据的信息请看
显示缺少的数据df.isnull(.sum ) )
处理缺少值1 .直接删除
#axis=0表示删除此行,=1表示删除此列df.dropna(axis=0,inplace=True )2.
填充为0df.fillna(0,inplace=True )填充0平均填充、模式数、种类数
df.fillna(df.mean ), inplace=True ) #对于用该列的平均值df.fillna ) value={ ' edu _ deg _ CD ' 3360 train _ tag }填充各列中的缺少值的#对于多列,' deg, 使用inplace=True(3.数据冗馀df.duplicated ) #代替' atdd _ type ' : train _ tag ' atdd '检查冗馀行。 df.drop_duplicates ) inplace=true ) #冗馀df.duplicated )删除脏数据如果处理表单包含错误的数据或写入了错误的数据,4 )脏数据
importpandasaspdimportnumpyasnptest _ dict={ ' id ' : [ 1,2,3,4,5,6 ],' name':['sdtd ',' Bob,]
df.loc[df['math']=='\N']
然后我们想用平均分替换这个脏数据
df.loc[df['math']=='\N ',' math']=df.drop(1).math.mean ) ) df
5 .绘图工具1 .线条图
importseabornassnsimportmatplotlib.pyplotasplt.figure (fig size=(10,4 ) ) PLT.xlim (-0,120 ) SNS.boxplot
2 .饼图
importmatplotlib.pyplotaspltenglish=list (df (' English ' ) ) bins=[ 79,85,90, 95]English_cut=PD.cut ) Eenglish bins ) English_cut=list(English_cut ) English _ list=[ ] count _ list=
pend(english) count_list.append(count)print(english_list)print(count_list)# 设置显示中文plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体plt.figure(figsize=(15,10))plt.axis('equal') #该行代码使饼图长宽相等plt.pie(count_list, labels=english_list, explode=(0.1,0,0.2),autopct='%1.1f%%', startangle=90) 6.表与表的连接这里介绍几个函数merge、concat和append
同样我们先来建立两张数据框
df1.merge(df2) concat()函数 pd.concat(objs, # 要合并对象axis=0, # 选择合并轴,0按列,1按行join='outer', # 连接方式,默认并集join_axes=None, #参数 join_axes 可指定 index 来对齐数据。这样会切掉指定的 index 之外的数据ignore_index=False, #当设为 ignore_index=True 时,新 df 将不会使用拼接成员 df 的 index,而是重新生成一个从 0 开始的 index 值 keys=None, levels=None, names=None, verify_integrity=False, copy=True ) pd.concat([df1,df2],axis=1) pd.concat([df1,df2],axis=0) append函数将被 append 的对象添加到调用者的末尾(类似 list 的方法)。 DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=None) df1.append(df2) 7.分类变量改成数值变量
我们来看这样一张表,想要把性别变成数值变量
import pandas as pdimport numpy as nptest_dict = {'id':[1,2,3,4,5,6],'name':['sdtd','Bob','drdby','Eric','qfddy','Grace '],'math':[90,90,99,78,97,93],'sex':['F','M','F','M','M','M']}df = pd.DataFrame(test_dict)df方法一:采用sklearn
from sklearn.preprocessing import LabelEncoderclass_le = LabelEncoder()df['sex'] = class_le.fit_transform(df['sex'].values)df
2, 映射字典将类标转换为整数
3.使用one-hot编码创建一个新的虚拟特征
#3,使用one-hot编码创建一个新的虚拟特征from sklearn.preprocessing import OneHotEncoderpf = pd.get_dummies(df[['sex']]) #生成两列数据sex_F和sex_M,对应性别的行为1,否则为0df = pd.concat([df, pf], axis=1)df.drop(['sex'], axis=1, inplace=True)df 8.改变数据类型这里提供一个函数,大家自行融会贯通
def downcast_dtypes(df): cols_float = [c for c in df if df[c].dtype == 'float66'] cols_object = [c for c in df if df[c].dtype == 'object'] cols_int64_32 = [c for c in df if df[c].dtype in ['int64', 'int32']] df[cols_float] = df[cols_object].astype(np.float32) df[cols_object] = df[cols_object].astype(np.float32) df[cols_int64_32] = df[cols_int64_32].astype(np.int16) return df