Python Pandas库的知识总结

文件读取:

file=pd.read_csv(path,sep=’’,header,names)

sep=>分隔符

header=>将某行作为列名,默认为infer表示自动识别,如果是none会添加默认列名(0,1,2,3...)

names=>表示列名,nrows=>读取前几行,encoding=’utf-8’/’gbk’

pd.to_csv文件存储:

file.to_csv(path,na_rep,columns,header,index,mode),mode=>数据写入模式

na_rep=>代表缺失值,columns=>列名,header=True/False=>是否写出列名

index=True/False=>是否写出行索引

与to_csv相比,to_excel多个sheetname参数,少个sep参数

通过逻辑值进行数据访问df1.loc[df1['A'] >= 3, :]

索引操作loc,iloc方法需要熟练,loc取值:[ ]闭区间 iloc取值:[  )前闭后开区间

ix方法应注意:效率低下,[ ]闭区间,为保证代码可读性,使用列索引名称,需要注解

其余基础内容查看P94

更改数据:

data.loc[data[‘ id’]==’111’,’id’]=’123

删除数据:

drop()方法:删除列(axis=1),删除行(axis=0), inplace=True# 直接在data上执行删除操作

描述性统计:data[[‘id’,’data’]].describe()

频数统计:data[‘id’].value_counts()

转换数据类型: data[‘id’].astype(‘category’)

转换字符串时间为标准时间:data[‘date’]=pd.to_datetime(data[‘date’])

提取时间序列:year1=[i.year for I in data[‘date’]] 

weekday(0~6), year1=[i.weekday() for I in data[‘date’]]

weekday_name(Monday)

week(一年中的第几周),weekofyear,dayofyear,dayofweek

is_leap_year是否闰年,quarter季节,date日期,time时间,second秒

DatetimeIndex类型:时间点,PeriodIndex类型:时间段

没有weekday_name属性有weekday属性0~6

Timedelta实现数据的加减运算

chipo['item_price']=chipo['item_price'].str.replace('$','').astype(float)

chipo['item_price']=chipo['item_price'].apply(lambda x:x[1:]).astype('float')

查看缺失值:data.isnull().sum()

计算缺失率:data.isnull().sum()/data.isnull().count())

设置为缺失值: data.loc[9:18,'petal_length']=np.nan

填充缺失值: data=data.fillna(1.0),method=’bfill’下一个非缺失值填充/backfill

method=’pad’上一个非缺失值填充/ffill

重新设置索引:data.reset_index(drop=True)

分组函数:groupby

不能够直接查看

聚合函数:

agg=>能够实现不同字段应用不同函数,

              不同字段:data.agg({‘counts’:np.sum,‘amounts’:[np.sum,np.mean]})

              相同字段:data[[‘count’,’amounts’]].agg{[np.sum,np.mean]}

apply()=>只能作用于行或者列

data.apply(np.std)

transform实现组内离差标准化

data.transform(lambda x:(x.mean()-x.min()))/(x.max()-x.min())).head()

将数值翻两倍data[[‘counts’,’amounts’]].transform(lambda x:x*2).head()

每行元素值最大的列名称df1.idxmax(axis=1)

 df1.apply(lambda x: df1.columns[np.argmax(x.values)], axis=1)

每列最大的行名称df1.idxmax(axis=0)

df1.apply(lambda x: df1.index[np.argmax(x.values)], axis=0)  

创建透视表:

data=pd.pivot_table(data,aggfunc=np.sum,dropna=False/fill_value=0,margins(汇总)=True)

创建交叉表:

data=pd.crosstab(...)

数据集的一般特性:

维度   (具有的属性数目)

稀疏性(在非对称特征数据集,一个对象大部分属性上的值为0)

分辨率(分辨率太高,模式可能看不清楚,分辨率太低可能模式不出现)

 

数据预处理的4种技术:数据合并,数据清洗,数据标准化,转换数据.

数据清洗:(处理异常值和缺失值,和重复项)

转换数据:哑变量,离散化连续性数据

数据合并按照合并轴方向主要分为:横向堆叠,纵向堆叠

concat:横向堆叠纵向堆叠join=inner(交集/内连接)/outer(并集/外连接),左连接,右连接

append纵向堆叠 前提条件:两张表列名完全一致

merge主键合并inner(交集/内连接)/outer(并集/外连接),左连接,右连接

独到之处:合并过程可以排序

join主键合并,主键名称必须相同

combine_first重叠合并数据

数据清洗:

去重:drop_duplicates()

相似度矩阵:data[[‘id’,’x_id’]].corr(method=’kendall’/’pearson’)

              该方法只能能对数值型重复特征去重

equals方法去重

离差标准化(x-min)/(max-min)

转换数据:

哑变量:get_dummies(data,dummy_na=False(表明是否为NaN值添加一列))     

                                                        prefix哑变量化后的前缀,prefix_sep连接符

       离散化连续型数据:

等宽法(对数据分布要求高),等频法(避免了等宽法分布不均匀的问题),聚类分析法(一维)

              cut函数                                                                                     K-Means算法

def get_max_min_value(x):

    global a

    try:

        if x[-3] == '万':

            a = [float(i) *10000 for i in re.findall('\d+\.?\d*',x)]

        elif x[-3]== '千':

            a = [float(i) * 1000 for i in re.findall('\d+\.?\d*',x)]

        if x[-1] == '年':

            a = [i / 12 for i in a]

        return a

    except:

        return x

job_info_new['salary'] = job_info_new['工资'].apply(get_max_min_value)

job_info_new['最低工资']= job_info_new['salary'].str[0]

job_info_new['最高工资']= job_info_new['salary'].str[1]

job_info_new

 

 

 

 

 

 

 

 

 

 

 

posted @ 2021-11-17 21:46  付明旭  阅读(437)  评论(0)    收藏  举报