Pandas - 操作DataFrame

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})
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值