pandas库学习笔记

0x00 简单说明

  作为机器学习小白,看了一段时间的coursera上Andrew Ng的视频,感觉还是难以入门,所以报名参加阿里天池上的比赛将理论和实践结合来提高姿势。题目是公交线路客流预测,所给的数据中并没有将乘客数量统计出来,需要自己对数据进行统计。先是自己写个python来统计分析数据(大概900M),但跑了一晚上,发现太慢,在网上搜索到了pandas库,不到半个小时就统计完成。

0x01 数据提取

  pandas.read_csv可按照一定的格式打开txt、csv文件。read_csv可选参数很多,全部参数请看官方文档,这里我只记录我觉得有用的和我用到的参数。

1
2
3
4
5
6
# filepath_or_buffer 数据文件的路径
# sep 数据的分割符号,不填则默认为','。阿里天池和kaggle的数据一般都是用','分割
# header 每一列的列名,如果数据文件中有列名,则忽略,否则填None
# names 当header=None,names填入你要设置的列名
e.g.
df = pd.read_csv("gd_train_data.txt",header=None,names = ['Use_city','Line_name','Terminal_id','Card_id','Create_city','Deal_time','Card_type'])

0x02 数据分析与统计

  当数据比较大时,记事本或者notepad++等程序无法打开,pandas给出了几个函数可以快速进行数据分析与统计。

df.head()

  查看前5行数据

df.describe()

  快速统计数据,可以方便我们观察数据的特性。describe有3个参数percentiles、include、exclude。percentliles可设置数据分层百分比,不填则默认为25%、50%、75%。include设置要统计的数据类型,默认为numeric dtypes,还有object dtypes、mixed dtypes可选。

1
2
e.g.
df.describe(include=['O'])

df[u’columns name’].value_counts()

  统计设置的columns有哪些value,对应的value counts,返回的结构中包含index和value数组。index数组存放value,value数组存放value counts。

1
2
3
4
5
6
7
e.g.
Card_type_table = df[u'Card_type'].value_counts() #统计卡片类型有哪几种,每种类型的卡片有多少张
for i in range(0,len(Card_type_table.index)):
if Card_type_table.index[i] == '卡片种类':
Num_Card_type_XXX == Card_type_table.values[i]
elif ...
...

条件过滤

1
2
3
e.g.
df[df[u'Line_name']== Line_name)] #单个条件
df[(df[u'Line_name']== Line_name ) & (df[u'Deal_time'] == Deal_time)] #多条件过滤用'&'连接,并加上'()'

pd.Series()

  添加列。两个参数,第一个参数为要添加的列数组,第二个参数为index。

1
2
3
4
e.g.
# 为df添加列'common',add为要添加的列数组:add = ['','','',...]
df = pd.read_csv("gd_train_data.txt",header=None,names = ['Use_city','Line_name','Terminal_id','Card_id','Create_city','Deal_time','Card_type'])
df['common'] = pd.Series(add,index = df.index)