Pandas

Pandas

0 重要概念

pandas 核心对象就是Dataframe和Series,前者简称df,就是excel那样的数据,二维的。Series就是excel的一列,df由多个Series构成。

1.文件读取

df=pd.read_csv(file_path,sep=',',header,names,index_col,usecols,)
常用参数:file_path 就是路径
    	sep 默认为,
        header 头 类似于excel的第一行
        names 当header=None,可以设置头,['a','b','c']
        index_col 有时候文件自带行索引,不需pandas提供
        usecols  需要用到的那些列,['a','c']
        skiprows 跳过哪一行,舍弃掉
# 其他文件格式大差不差

我们也可以使用 to_csv() 方法将 DataFrame 存储为 csv 文件

1.1 查看df的一般信息

df.head(n) # n为int 表示读前几行 
df.tail(n) # 表示读后几行
df.info() # 查看数据的属性 有没有缺失值

2.Series

2.0 Series简介

Series 就是可以理解为dataframe的一列,他的索引是可以设置的,可以理解为key:value

2.1 Series 创建

pd.Series(data:数据,index:"索引",dtype:"类型",name:"名称")
s1 = pd.Series(data=[i for i in range(10)], index=[f'{i}a' for i in range(10)])
print(s1['1a'])  # 为 1 可以根据索引直接取出来

data 也可以是字典
data = {f'{i}a':i for i in range(10)} # 和上面是样的

2.2 Series 属性

series.index  # 系列的索引
series.values # 系列的值
series.name    # 头标签,类似于excel的第一行
series.hasnan   # 是否有nan值

2.3 Series 数据访问

s1 = Pd.Series(data={f'{i}a':i for i in range(10)})
s1[0],s1[[1,2,3]],s1[1:3], # 内置索引
s1[['1a','2a']]  # 我们自己设置的索引

2.4 Series 部分函数使用

series.astype(dtype)  #    将series类型转成dtype   dataframe  df.astype({"col":dtype})
series.convert_dtypes() #  自动转成便于计算的类型
series.apply(func)  # 每一行应用方法
series.map({k:v})  # 把k映射成v,没有映射到的为NAN
series.agg(['min','max'])
series.groupby()
# ser.groupby(["a", "b", "a", "b"]).mean()
# ser.groupby(level=0).mean()
# ser.groupby(ser > 100).mean()
series.describe() # 描述信息

3 . Dataframe

3.1 Dataframe创建

1. 列表创建
	 pd.Dataframe([['Google',10],['Runoob',12],['Wiki',13]])
2. 字典创建1
	 data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}
     pd.Dataframe(data = data)
3. 字典创建2
	data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
    pd.Dataframe(data = data)

3.2 Dataframe 属性

df.index
df.columns
df.values # [ [一行行数据],[一行行数据] ]
df.memory_usage() # 内存使用信息
df.ndim  # 几个维度的

3.3 Dataframe 转换

1. df.astype
	df.astype('int32')
	df.astype({'col1': 'int32'}).dtypes
2. convert_dtypes   # 将python 对象转成 便于运算的
3. df.infer_objects()

3.4 行列操作curd等

3.4.1 列操作

1. 列的获取
	df['列名']
    df[['col1','col2']]  # 取出想要的列  df[df.columns[0:2]] 这种也行
2. 列的添加
	df['新列'] = pd.Series([xxxx,xxxxx])
3. 插入
	df.insert(2,'列名',allow_duplicates=False) # 第三个参数表示可不可以列名重复
4. 删除
	del(df['列名'])
    df.pop('列名')
    df.drop(['列名'],axis=1) # 当axis=1 删除列  当为0 时表示删除一行

3.4.2 行操作

1 . 取出
	df.loc[['b','d']]
    df.iloc[0:2]
    df.loc['a':'b',"a":"e"]  # 自定义索引切
    df.iloc[1:3,2:5]   # 自带int索引获取
2.  添加
	df.append(df,ignore_index)  #
3. 删除
	df.drop(index)
4. 定位
	df['列']['索引']  # 视图  可以修改
    df['列'].iat[index]

3.5 Dataframe 一些方法

1. df.where(df>100,other=100) #大于100的保持原样,其他的为100
2. df.mask(df>100,1000) # 大于100 的标记为1000
3. df.query('a<b')  # 返回dataframe对象  和这个一样  df[df.a < df.b]
4. df.apply(func,axis) axis=0 表示一列下都是的,axis=1表示 每一行
5. df.applymap(func) 给每一个元素,进行函数处理
6. df.groupby(['列']).agg({'age':[np.min,np.max]})
7. df.sort_values(by, axis=0, ascending=True:"升序还是降序",inplace = False:"是否就地")
ex:
    df2 = pd.DataFrame({"a":['v1a','a3e',"o2q",'o4w'],'b':[ i for i in range(4)]})
 df2.sort_values(by='a',key = lambda x:df2['a'].apply(lambda x:int(x[1])))

8. df.set_index('col')  #把列作为索引

3.6 数据透视表

3.6.0 透视表简介

和excel的透视表一样,将一堆数据,按照某一列分组,计算出其他列的均值、总和、最大值等类似的值

3.6.1 pivot_table的使用

pivot_table(values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True)
values # 要计算那种数据
index # 指的是一行一行的索引,
columns # 指的是每一个列的索引
margins # 表示是否有边缘 汇总,

3.7 数据清洗

数据一般会存在重复值,异常值,缺失值
重复值:数据重复,可能是一行数据都一样当作为重复,也可能事某一列重复就当作重复。
缺失值:值没有,一般要填充,填充的值有多样,众数、平均等
异常值:有一些值比较怪,不符合标准。比如某个值大于三倍标准差的测定值

3.7.1 重复值

df.duplicated(subset=['列'],keep='last')  # subset 默认每一行都一样才算重复,keep表示重复的值保留哪一个,最后一个还是第一个
df.drop_duplicated(subset=['列'],keep='last')  # 去除重复值,subset表示哪列一样就算重复

3.7.2 缺失值

1. 丢弃 df.dropna( axis = 0 , how = 'any' , thresh = None , subset = None , inplace = False )
	thresf: 表示要有几个缺失才删除
    axis: 表示轴
    subset: 表示依据那几个列判断,
    inplace:表示是否修改原来的df
2. 替换 df.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
	method:表示替换的方法
    limit:表示最多替换多少
    value:表示把nan替换成什么
3. 插值法
	通过计算构建模型计算出这个值

3.7.3 异常值

异常值一般要通过分析,根据业务场景标准不一样,有常见几种方法,
1. 简单统计量分析 
2. 3σ原则,数据 - 平均值 > 3*标准差 
3. 箱线图分析方法

3.8 Dataframe 合并

3.8.1 df.append()

df.append(other, ignore_index=False, verify_integrity=False, sort=False)
other: 添加其他的df,数据一样

3.8.2 df.compare()

df.compare(other, align_axis=1, keep_shape=False, keep_equal=False)
# 展示两个df的不同,

3.8.3 df.join()

df.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)

other:表示和谁合并
on:以那个为准合并
lsuffix:当df的列一样左边的df的列加一个后缀

3.8.4 df.merge()

df.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

 

posted @ 2021-07-28 16:13  我也想18岁  阅读(191)  评论(0编辑  收藏  举报