1.DataFrame两列相除,分母为零处理方法
# 直接相除,分母不可为零
df['dead_rate'] = df['dead_count']/df['confirmed_count']
# 分母为零返回0
df_city['dead_rate'] = df_city.apply(lambda x: x['dead_count'] / x['confirmed_count'] if x['confirmed_count']!=0 else 0, axis=1)
2.DataFrame条件判断删除
获得符合删除条件的行的索引,传入drop()函数的index参数中,inplace=True操作原DataFrame
多条件可以使用操作符: | 或, & 与, ~ 非,需用括号分隔
# 删除confirmed_count列的值为0的行
df_city.drop(index=df_city.loc[df_city['confirmed_count']==0].index, inplace=True)
# 删除['学号','姓名','班类']三列,注意axis=1
df_south.drop(['学号','姓名','班类'],axis = 1, inplace=True)
3.DataFrame定义行索引
重定义行索引方法一:reset_index(),其中drop=True可删掉原行索引,重定义行索引为0-n
df_city = df_city.reset_index(drop=True)
# 或者
df_city.reset_index(drop=True, inplace=True)
重定义行索引方法二:对df.index进行赋值
# 将index改成从1开始
df.index = range(1,len(df) + 1)
将指定列作为行索引
df.set_index(['columns'],inplace=True)
4.DataFrame重新定义列索引
方法一:rename()
# 原列名 序号 更改为 人数
df_south.rename(columns={'序号':'人数'}, inplace=True)
方法二:对df.columns赋值
# 更改全部列名
df.columns=['id','stu_name','stu_class']
5.DataFrame 分组
以“学院_x”分组,取[‘学院_x’,‘人数’]两列,求和
as_index=False(可以理解为和sql一样的结果)
df_final.groupby('学院_x', as_index=False)['学院_x','人数'].agg('sum')
6.DataFrame合并
merge()
以“学院_x”为连接公共部分合并
df_final = pd.merge(df_final, df_temp, left_on='学院_x', right_on='学院_x', how='inner')
concat()
直接连接两个DataFrame,axis=0按行连接,重定义新的索引
也可以连接两个series
pd.concat([df1,df2], axis=0, ignore_index=True)
7.DataFrame删除重复行
drop_duplicates() keep='first’为保留重复值中的第一个
df_temp2.drop_duplicates(keep='first', inplace=True)
8.DataFrame保存到一个xlsx文件的不同sheet中
writer = pd.ExcelWriter('name.xlsx')
df_first_name.to_excel(writer, sheet_name='姓')
df_one_name.to_excel(writer, sheet_name='两个字的名')
writer.save()
writer.close()
9.创建空DataFrame
index必须传入
如果字典的值不是列表只是一个元素,同理也需要传入index
df = pd.DataFrame(dic = {
'director':'',
'writer':''
}, index=[0])
10.DataFrame排序
# 设置逆序排列
df_pty = df_pty.sort_values(by=['comment_id'], ascending = False)
11.DataFrame元素改成timestamp格式
pd.to_datetime('2020-2-23')
# 时间戳做差为相差日期
temp = datetime.datetime.strptime('2020-2-1', '%Y-%m-%d')
(pd.to_datetime('2020-2-23')-temp).days
>>> 22
12.DataFrame特征分箱
rf['R-SCORE'] = pd.cut(rf['R'],bins = [0,30,90,120,365,1000000],labels = [5,4,3,2,1],right = False).astype(float)
13.填充空值
df.fillna(-2, inplace=True)
14.数据替换
df.replace('\\N', -2, inplace=True)
15.数据类型转换
df['job_year'] = df['job_year'].astype('int')
16.选择某一类型的特征
cat_features = [x for x in df.select_dtypes(
include=['object', 'category']).columns if x not in ['id', 'flag']]
17.对离散特征进行标签编码
data['cat'] = data['cat'].astype('category').cat.codes
18.对加载的数据指定类型
final = pd.read_excel('final.xlsx',converters={'city_id':str})