通过apply进行数据预处理

通过apply进行数据预处理

引入相关库

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

数据获取

读取csv文件,通过head看DataFrame的数据,有两列

df=pd.read_csv('../homework/apply_demo.csv')
df.head()
timedata
01473411962Symbol: APPL Seqno: 0 Price: 1623
11473411962Symbol: APPL Seqno: 0 Price: 1623
21473411963Symbol: APPL Seqno: 0 Price: 1623
31473411963Symbol: APPL Seqno: 0 Price: 1623
41473411963Symbol: APPL Seqno: 1 Price: 1649

通过size查看多少行

df.size
7978

创建一个新的Series

s1= Series(['a']*7978)

往DataFrame里面添加新的一列’A’

df['A']=s1
df.head()
timedataA
01473411962Symbol: APPL Seqno: 0 Price: 1623a
11473411962Symbol: APPL Seqno: 0 Price: 1623a
21473411963Symbol: APPL Seqno: 0 Price: 1623a
31473411963Symbol: APPL Seqno: 0 Price: 1623a
41473411963Symbol: APPL Seqno: 1 Price: 1649a

通过apply和str.upper方法,把A这个columns里面所有的元素变成大写

df['A']=df['A'].apply(str.upper)
df.head()
timedataA
01473411962Symbol: APPL Seqno: 0 Price: 1623A
11473411962Symbol: APPL Seqno: 0 Price: 1623A
21473411963Symbol: APPL Seqno: 0 Price: 1623A
31473411963Symbol: APPL Seqno: 0 Price: 1623A
41473411963Symbol: APPL Seqno: 1 Price: 1649A

数据分割处理

data里面的每个数据有三个元素’Symbol‘,’Seqno‘,’Price‘,把它分割为三列’Symbol‘,’Seqno‘和’Price‘
以data第一行为例,通过空格进行split,通过strip去掉头尾空格的干扰,返回一个list

l1=df['data'][0].strip().split(' ')

这个list的第2,4,6个元素即为我们想要得到的值。

l1[1],l1[3],l1[5]
('APPL', '0', '1623')

编写一个函数,用来apply方法的调用,split这一列,实现原理如上面一样

def foo(line):
    items=line.strip().split(' ')
    return Series([items[1],items[3],items[5]])

使用apply方法把data这一列分为三列

df_tmp=df['data'].apply(foo)
df_tmp.head()
012
0APPL01623
1APPL01623
2APPL01623
3APPL01623
4APPL11649

使用rename方法把新生成的columns的名字重新命名一下

df_tmp=df_tmp.rename(columns={0:"Symbol",1:"Seqno",2:"Price"})
df_tmp.head()
SymbolSeqnoPrice
0APPL01623
1APPL01623
2APPL01623
3APPL01623
4APPL11649

把combine_first把df_tmp加到df的上面

df_new=df.combine_first(df_tmp)
df_new.head()
APriceSeqnoSymboldatatime
0A16230APPLSymbol: APPL Seqno: 0 Price: 16231473411962
1A16230APPLSymbol: APPL Seqno: 0 Price: 16231473411962
2A16230APPLSymbol: APPL Seqno: 0 Price: 16231473411963
3A16230APPLSymbol: APPL Seqno: 0 Price: 16231473411963
4A16491APPLSymbol: APPL Seqno: 1 Price: 16491473411963

数据删除处理

删掉data列

del df_new['data']
df_new.head()
APriceSeqnoSymboltime
0A16230APPL1473411962
1A16230APPL1473411962
2A16230APPL1473411963
3A16230APPL1473411963
4A16491APPL1473411963

删掉’A’这一列

del df_new['A']
df_new.head()
PriceSeqnoSymboltime
016230APPL1473411962
116230APPL1473411962
216230APPL1473411963
316230APPL1473411963
416491APPL1473411963
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值