通过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()
time | data | |
---|---|---|
0 | 1473411962 | Symbol: APPL Seqno: 0 Price: 1623 |
1 | 1473411962 | Symbol: APPL Seqno: 0 Price: 1623 |
2 | 1473411963 | Symbol: APPL Seqno: 0 Price: 1623 |
3 | 1473411963 | Symbol: APPL Seqno: 0 Price: 1623 |
4 | 1473411963 | Symbol: APPL Seqno: 1 Price: 1649 |
通过size查看多少行
df.size
7978
创建一个新的Series
s1= Series(['a']*7978)
往DataFrame里面添加新的一列’A’
df['A']=s1
df.head()
time | data | A | |
---|---|---|---|
0 | 1473411962 | Symbol: APPL Seqno: 0 Price: 1623 | a |
1 | 1473411962 | Symbol: APPL Seqno: 0 Price: 1623 | a |
2 | 1473411963 | Symbol: APPL Seqno: 0 Price: 1623 | a |
3 | 1473411963 | Symbol: APPL Seqno: 0 Price: 1623 | a |
4 | 1473411963 | Symbol: APPL Seqno: 1 Price: 1649 | a |
通过apply和str.upper方法,把A这个columns里面所有的元素变成大写
df['A']=df['A'].apply(str.upper)
df.head()
time | data | A | |
---|---|---|---|
0 | 1473411962 | Symbol: APPL Seqno: 0 Price: 1623 | A |
1 | 1473411962 | Symbol: APPL Seqno: 0 Price: 1623 | A |
2 | 1473411963 | Symbol: APPL Seqno: 0 Price: 1623 | A |
3 | 1473411963 | Symbol: APPL Seqno: 0 Price: 1623 | A |
4 | 1473411963 | Symbol: APPL Seqno: 1 Price: 1649 | A |
数据分割处理
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()
0 | 1 | 2 | |
---|---|---|---|
0 | APPL | 0 | 1623 |
1 | APPL | 0 | 1623 |
2 | APPL | 0 | 1623 |
3 | APPL | 0 | 1623 |
4 | APPL | 1 | 1649 |
使用rename方法把新生成的columns的名字重新命名一下
df_tmp=df_tmp.rename(columns={0:"Symbol",1:"Seqno",2:"Price"})
df_tmp.head()
Symbol | Seqno | Price | |
---|---|---|---|
0 | APPL | 0 | 1623 |
1 | APPL | 0 | 1623 |
2 | APPL | 0 | 1623 |
3 | APPL | 0 | 1623 |
4 | APPL | 1 | 1649 |
把combine_first把df_tmp加到df的上面
df_new=df.combine_first(df_tmp)
df_new.head()
A | Price | Seqno | Symbol | data | time | |
---|---|---|---|---|---|---|
0 | A | 1623 | 0 | APPL | Symbol: APPL Seqno: 0 Price: 1623 | 1473411962 |
1 | A | 1623 | 0 | APPL | Symbol: APPL Seqno: 0 Price: 1623 | 1473411962 |
2 | A | 1623 | 0 | APPL | Symbol: APPL Seqno: 0 Price: 1623 | 1473411963 |
3 | A | 1623 | 0 | APPL | Symbol: APPL Seqno: 0 Price: 1623 | 1473411963 |
4 | A | 1649 | 1 | APPL | Symbol: APPL Seqno: 1 Price: 1649 | 1473411963 |
数据删除处理
删掉data列
del df_new['data']
df_new.head()
A | Price | Seqno | Symbol | time | |
---|---|---|---|---|---|
0 | A | 1623 | 0 | APPL | 1473411962 |
1 | A | 1623 | 0 | APPL | 1473411962 |
2 | A | 1623 | 0 | APPL | 1473411963 |
3 | A | 1623 | 0 | APPL | 1473411963 |
4 | A | 1649 | 1 | APPL | 1473411963 |
删掉’A’这一列
del df_new['A']
df_new.head()
Price | Seqno | Symbol | time | |
---|---|---|---|---|
0 | 1623 | 0 | APPL | 1473411962 |
1 | 1623 | 0 | APPL | 1473411962 |
2 | 1623 | 0 | APPL | 1473411963 |
3 | 1623 | 0 | APPL | 1473411963 |
4 | 1649 | 1 | APPL | 1473411963 |