Pandas 介绍
Pandas是基于Numpy创建的Python库,为Python提供了易于使用的数据结构和数据分析的工具
Pandas 数据结构
1.Series -序列
储存任意类型的一维数组
2.DataFrame -数据框
储存不同类型数据的二维数组
Pandas 文件读写
import pandas as pd
# 从文件中读取数据
pd.read_csv()
pd.read_table() # 从制表符分隔文件读取,如TSV
pd.read_excel()
pd.read_sql()
pd.read_json()
# 从数据写入文件
pd.to_csv()
pd.to_table()
pd.to_excel()
pd.to_sql()
pd.to_json()
Pandas 数据预处理
数据处理
import pandas as pd
# 1.查看数据情况
df = pd.read_csv() # 读取CSV文件
df.head()
df.shape # df.shape[0] -读取矩阵第一维度的长度(行的长度)
df.info() # 样本数、数据类型和内存占用等信息
df.describe() # 统计数据
df.count()
df.dtypes
df.isnull()
df['col'].unique() # 去重复
df.index
df.columns
df.tail()
# 2.缺失值,异常值的处理
# 处理缺失值也可以从缺失率的角度出发,分别进行填补
df.fillna(0)
df.dropna()
df['col'].fillna(df['col'].mean()) # mode()--分类数据
# 3.对字符串和日期数据的处理(文字,地名)
df['col'] = df['col'].map(str.strip)
df['col'] = df['col'].str.lower()
df['col'].astype('int')
df.rename(columns={'col': 'col1'})
df['col'].str.replace('\', '-')
df['col'].str.split('-')
# df['col'].join()
df['col'].drop_duplicates() # 默认删除后出现的重复值 设置参数keep=‘last’删除前出现
df['date'] = pd.to_datetime(df['date'])
df['date'] = pd.date_range('2019-05-10',periods=6,freq='M')
# 输出(periods为周期)
>>> DatetimeIndex(['2019-05-31', '2019-06-30', '2019-07-31', '2019-08-31','2019-09-30', '2019-10-31'],dtype='datetime64[ns]', freq='M')
# 4.合并数据
```javascript
import pandas as pd
pd.merge(data1,data2,how='inner',on='id')
pd.merge(data1,data2,how='left',on='id')
pd.merge(data1,data2,how='right',on='id')
pd.merge(data1,data2,how='outer',on='id')
data1.join(data2, how='right')
s1.append(s2) # 纵向
pd.concat([data1,data2],axis=1, join='inner')
# 透视表
# 行变列
df = pd.pivot_table(df2,values='col',index='date',columns='type')
# 创建透视表,根据'A'列的值进行分组,并计算每一组中'B'和'C'的均值
df.pivot_table(index='A',values=['B','C'],aggfunc=mean)
# 融合
pd.melt(df2,id_vars=['date'],value_vars=['Type','Value'],value_name=['col'])
# 对复合多个条件的数据进行分组标记
df.loc[(df['籍贯'] == '北京') & (df['年龄'] >= 22), 'sign']=1
# 对某一列值依次进行分列,产生新的列
pd.DataFrame((x.split('-') for x in df['col']),index=df.index,columns=['col1','col2']))
数据提取
loc函数按标签值进行提取,iloc按位置进行提取,ix可以同时按标签和位置进行提取
使用与、或、非条件配合比较运算符对数据进行筛选提取
import pandas as pd
df.loc[3]
df.iloc[0:5]
df[:'2019-05-10'] # 提取规定日期之前的数据
df.loc[:,(df>1).any()] # 选择任意值大于1的列 .all()为所有值
df.loc[:,df.isnall().any()]
df.filter(items='a','b')
pd.DataFrame(category.str[:3]) # 提取前三个字符 ,并生成数据表
# 使用 & | !=
df.loc[(df['age'] > 25) & (df['city'] == 'beijing'), ['id','city','age','category','gender']]
df.loc[(df_inner['age'] > 25) | (df['city'] == 'beijing'), ['id','city','age','category','gender']].sort(['age'])
df.loc[(df['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id'])
df.loc[(df['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id']).city.count()
df.query('city == ["beijing", "shanghai"]').price.sum()
数据统计汇总
import pandas as pd
df.groupby('A').count() # 根'A'列进行分组,对所有的列进行计数汇总
df.groupby('A')['id'].count() # # 根'A'列进行分组,对['id']列进行计数汇总
df.groupby(['A','B'])['C'].mean()
df.groupby('A')['B'].agg([len,np.sum, np.mean])
weights = [0, 0.2, 0.3, 0.4, 0.5, 0.5]
df.sample(n=2, weights=weights) # 按权重给数据采样
df.sample(n=3, replace=True) # 又放回采样(replace=False时不放回采样)
df.cumsum() # 累计
df.std() # 标准差
df['A'].cov(df['B'])
df.cov() # 协方差矩阵
df.corr() # 相关性系数矩阵
df.cut(s,bins[0, 5, 10], labels=['A','B']) # 离散化
df.get_dummies(df, columns=['A'],drop_first=True) # 对A列进行one-hot编码
df.rank() # 数据框排名
df.sort_values() # by= ' ',可指定排序方式
df['A'].value_counts() # A列按个数从大到小排序(可视化中常用)
df.apply() # 后面可接内置函数、lambda函数、自定义函数
data['A'] = data['A'].apply(lambda x: x[6:10]) # 对A列每个元素进行处理
上面就是在学习和工作中遇到pandas的常用方法了,希望能对大家有帮助,若有问题请及时沟通,共同进步