astype函数_使用pandas做数据分析,掌握这些函数就够了

pandas是数据分析师最常用的工具之一,掌握以下函数足以应对工作中的各种需求,

fab47047d6485b50d966169f321f96bd.png
  • P4 数据集描述
  • P5 重命名列名称
  • P6 删除列
  • P7 整体排序
  • P8 通过列条件筛选数据
  • P9 多条件筛选
  • P11 怎样使用axis参数
  • P12 字符串方法
  • P13 改变数据类型
  • P14 什么时候使用groupby
  • P15 探索series
  • P16 处理缺失值
  • P17 关于index
  • P18 选择多行或多列
  • P21 减少dataframe占用内存
  • P24 创建虚拟变量(one-hot编码)
  • P25 时间字段处理
  • P26 去除重复项
  • P27 怎样避免SettingWithCopyWarming
  • P28 改变显示选项
  • P29 创建Dateframe的方式
  • P30 对DataFrame或Series使用函数

P4 数据集描述

df.describe() df.describe(include=['object'])df.shapedf.dtypes

P5 重命名列名称

df.columnsdf.rename(columns={'name1':'rename1', 'name2':'rename2'}, inplace=True)df_newcolumns = ['rename1', 'rename2']df.columns = df_newcolumns# 替换列名中的字符df.columns = df.columns.str.replace(' ', '_')

P6 删除列

df.drop('name1', axis=1, inplace=True) # axis=1 列df.drop(['name1','name2'], axis=1, inplace=True)

P7 整体排序

df['name1'].sort_values(ascending=False) # ascending=False 倒序df.sort_values('name', ascending=False)df.sort_values(['name1','name2'], ascending=False)

P8 通过列条件筛选数据

df[df.age>20]df.loc[df.age>20, 'name1']

P9 多条件筛选

df[(df.name1>10) & (df.name2<0)]df[(df.name1>10) | (df.name2<0)]df[df.name1.isin(['key1', 'key2', 'key3'])]

P11 怎样使用axis参数

df.drop('name',axis=1)df.mean(axis=0) # 每列的均值df.mean(axis=1) # 每行的均值
2197829728ee78370834f3278df24b66.png

P12 字符串方法

# name1列转大写df.name1.str.upper()df.name1.str.contain('hah') # 返回True/Falsedf[df.name1.str.contain('hah')] # 用于筛选

P13 改变数据类型

df.name = df.name.astype(float)df = pd.read_csv(dtype={'name1':float})# 布尔型装换位0、1df.name1.astype(int)

P14 什么时候使用groupby

df.groupby('name1').name2.mean()df.groupby('name1').name2.agg(['count','mean', 'max', 'min'])df.groupby('name1').mean() # 得到所有列的均值对每列使用不同的聚合函数怎么做
720c87667eda7a3283654a8512cb8eaa.png

P15 探索series

# 一列中每个元素的数量df.name.value_counts() # 默认不计算缺失值,如果要计算需要(dropna=False)# 一列中每个元素的占比df.name.value_counts(normalize=True)# 一列中每个元素df.name.unique()# 一列中元素数量df.name.nunique()pd.crosstab(df.name1, df.name2) # 价差表

P16 处理缺失值

# 查看是否是缺失值df.isnull()/df.notnull()# 查看每个特征缺失值数量df.isnull().sum()df.dropna(how='any') # 删除所有包含缺失值的行df.dropna(how='all') # 删除所有值都是缺失值的行df.dropna(subset=['name1', 'name2'], how='any') # 删除这两列中包含缺失值的行# 填充缺失值df['name'] = df['name'].fillna(value='hah', inplace=True)

P17 关于index

# 重置indexdf.set_index('name1', inplace=True)df.reset_index(inplace=True)# 改变index的namedf.index.name = Nonedf.index.name = 'hdah'pd.concat([df1, series1], axis=1) # 可以合并dataframe和series

P18 选择多行或多列

df.loc # 使用标签名称df.loc[1:3,:] # 包含1和3df.iloc # 使用位置df.iloc[1:3,:] # 包含1不包含3

P21 减少dataframe占用内存

79dbab96603e1c742eb946cfb660442d.png
# 查看个字段占用内存df.memory_usage(deep=True)# 为object加上自定义大小顺序df['name'] = df['name'].astype('category', categories=['good', 'good1', 'good2'], ordered=True)

P24 创建虚拟变量(one-hot编码)

df['new_name'] = df.name.map({'x':1, 'y':2}) # 把name列中的x改为1,y改为2pandas.get_dummies(df.sex, prefix='sex') # 离散特征重新编码,以x开头pandas.get_dummies(df, columns=['name1', 'name2'], drop_first=True) # drop_first参数默认为False,删除结果中的第一列。

P25 时间字段处理

# 字符串切片df.name1.str.slice(-5,-3)# 日期处理函数df['time'] = pd.to_datetime(df.time)# 其他方法(.dt.)df.time.dt.weekday or weekday_name 返回周几df.time.dt.dayofyear 返回一年中的第几天# 作为筛选条件ts = pd.to_datetime('1/1/2019')df.loc[df.times>ts, :]# 日期之间的数学计算(df.times.max() - df.times.min()).days

P26 去除重复项

# 重复个数df.name.dumplicated().sum()df.dumplicated().sum()# 重复项明细df.loc[df.dumplicated(keep=False), :] keep参数,False全部显示,first显示做后一个,last显示第一个;# 删除重复想df.drop_dumplicates(keep=last)df.drop_dumplicates(subset=['name1', 'name2'])
0f6b954cb0f27971c9b3282d570164f6.png

P27 怎样避免SettingWithCopyWarming

尽量使用loc,避免直接copy经过多级筛选之后,pandas不确定当前Dateframe是否是copy过来的,所以,对当前dateframe操作时,不确定是否为影响最初的数据集,而爆出SettingWithCopyWarming,可以在最初拷贝数据集的时候使用copy方法;

P28 改变显示选项

主要方法 pandas.get_option()显示所有行pd.set_option('display.max_rows', None)默认显示60行pd.set_option('display.max_rows', None)其他选项最大列数:display.max_columns最大单元格宽度:display.max_colwidth小数点位数:display.precision查看目前选项:pd.describe_option()pd.describe_option('rows')重置所有默认选项pd.reset_option('all')

P29 创建Dateframe的方式

1 字典pd.DataFrame({'id':[1,2,3], 'name':['hah','jjj','kk']}, columns=['id2', 'name2'], index=['x','y','z'])2 列表pd.DataFrame([[1,2,3], ['x','v','b'], [1,'5','x']]) 一个子列表为一行3 使用numpyarr = np.random.rand(4,2) 4行2列pd.DataFrame(arr)4 字典结合numpypd.DataFrame({'id':np.arrange(100,110,1), 'name':np.random.randint(60, 101,10)})5 连接DataFrame和Series'pd.concat([df,s], axis=1)

P30 对DataFrame或Series使用函数

mapdf['name1'] = df.name.map({'x':1, 'y':2}) applydf[name1] = df.name,apply(len)df[name1] = df.name,apply(np.ciel)def fun(x,y): return x[y] df.name.apply(fun, y=2df.apply(max, axis=0) 每一列的最大值df.apply(max, axis=1) 每一行的最大值df.apply(np.argmax, axis=1) 每一行的最大值对应的列名applymap 针对全局每一个单元格做操作df.applymap(float)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值