加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

pandas数据处理(一)

发布时间:2020-12-14 05:01:03 所属栏目:大数据 来源:网络整理
导读:首先导入模块,并加载数据集到python中: import pandas as pd import numpy as npfeature_data = pd.read_csv( './fusai_data/feature_data_2017_3456_7.csv' ,dtype={ 'link_ID' :str}) dtype是指定某列的数据类型。 其他参数有 index_col=”ID”,指定索

首先导入模块,并加载数据集到python中:

import pandas as pd
import numpy as np
feature_data = pd.read_csv('./fusai_data/feature_data_2017_3456_7.csv',dtype={'link_ID':str})

dtype是指定某列的数据类型。
其他参数有 index_col=”ID”,指定索引。

1 – 布尔索引

如果需要以某几列数据值为条件过滤数据

选取58点的数据
    train5 = feature_data.loc[(feature_data.time_interval_month == 5)&
           (feature_data.time_interval_begin_hour==8),:]

解析:第一维是行索引,第二维是列索引。这里的布尔索引的针对行的,表示满足条件的所有行;而列是“:”,表示选取所有的列,如果是特定的几列,可以用用[link_ID,travel_time]替换“:”部分。

2-查看dataframe的固有信息

(1)查看有哪些列
    train5.column2)查看列的数据类型
    train5.dtypes
 (3)查看列的缺省值数量
    train5.isnull().sum()

结果:

(1) 
Index(['link_ID','length','width','link_class','time_interval_begin','time_interval_year','time_interval_month','time_interval_day','time_interval_begin_hour','time_interval_minutes','time_interval_week','travel_time','mean_58','median_58','mode_58'],dtype='object')
(2)
link_ID                      object
length                        int64
width                         int64
link_class                    int64
time_interval_begin          object
time_interval_year            int64
time_interval_month           int64
time_interval_day             int64
time_interval_begin_hour      int64
time_interval_minutes         int64
time_interval_week            int64
travel_time                 float64
mean_58                     float64
median_58                   float64
mode_58                     float64
dtype: object
其中,object表示的是string类型或非数值类型。
(3)
link_ID                         0
length                          0
width                           0
link_class                      0
time_interval_begin             0
time_interval_year              0
time_interval_month             0
time_interval_day               0
time_interval_begin_hour        0
time_interval_minutes           0
time_interval_week              0
travel_time                     0
mean_58                     12991
median_58                   12991
mode_58                     12991
dtype: int64

3-填补缺失值

fillna()就可以解决,比如填固定值-9999

train5 = train5.fillna(-9999)
or
train5.fillna(-9999,inplace=True)
其中,inplace=True表示就地填充。

4-深拷贝

import copy
train5_tmp = copy.deepcopy(train5)
如果train5_tmp的值改变,train5相应位置的值不改变。

5-DataFrame与numpy.array的相互转换

(1)DataFrame转numpy.array
arr = train5.values
(2)numpy.array转DataFrame
arr_pd = pd.DataFrame(arr)

6-数据透视,有点像groupby的意思

train5.pivot_table( values=["travel_time"],index=['time_interval_week','time_interval_month'],aggfunc=np.mean)

结果

travel_time
time_interval_week time_interval_month             
1                  5                      19.967901
2                  5                      19.275360
3                  5                      19.876924
4                  5                      19.813867
5                  5                      20.429607
6                  5                      15.951253
7                  5                      14.088380

7-pandas里面的统计信息

np.random.seed(1234)
d1 = pd.Series(2*np.random.normal(size = 100)+3)
d2 = np.random.f(2,4,size = 100)
d3 = np.random.randint(1,100,size = 100)

d1.count() #非空元素计算
d1.min() #最小值
d1.max() #最大值
d1.idxmin() #最小值的位置,类似于R中的which.min函数
d1.idxmax() #最大值的位置,类似于R中的which.max函数
d1.quantile(0.1) #10%分位数
d1.sum() #求和
d1.mean() #均值
d1.median() #中位数
d1.mode() #众数
d1.var() #方差
d1.std() #标准差
d1.mad() #平均绝对偏差
d1.skew() #偏度
d1.kurt() #峰度
d1.describe() #一次性输出多个描述性统计指标

8-column names 重命名

(1)train5.columns = ['a','b','c','e','d','f'] # 重命名
(2)train5.rename(columns = {'A':'aa','B':'bb','C':'cc','D':'dd','E':'ee','F':'ff'},inplace=True)
(3)train5.rename(columns=lambda x: x[1:].upper(),inplace=True) # 也可以用函数 inplace参数的意思就是代替原来的变量,深拷贝

9-value_counts,统计每个数值出现的个数

pd.value_counts(train5['time_interval_minutes'])
结果:
44    3895
58    3892
30    3891
32    3890
46    3885
56    3880
40    3872
36    3871
54    3869
34    3869
28    3867
24    3863
48    3861
42    3861
38    3859
20    3859
26    3848
18    3842
50    3842
22    3838
16    3831
52    3828
4     3824
14    3822
6     3822
8     3819
12    3813
10    3810
2     3802
0     3787

10-删除列和行

1)列
train5.drop(['time_interval_month'],inplace=True,axis=1)
or
del train5['time_interval_week']
(2)行,删除索引为13的行
train5.drop(train5.index[[1,3]],inplace=True)

11-pop某一列

'time_interval_begin'从train5中删除,并赋值给train_time:
train_time = train5.pop('time_interval_begin')

12- one-hot编码

(1)根据列'time_interval_week'生成哑变量week,并把week添加到原DataFrame里面去。
week = pd.get_dummies(feature_data['time_interval_week'],prefix='week')
del train5['time_interval_week']
train5 = pd.concat([train5,week],axis=1)
(2)将train5中所有非数值变量转化成哑变量
train5_onehot = pd.get_dummies(train5)

13-筛选

(1) df[(df.A >= -1) & (df.B <= 0)] # 值筛选
(2) df[df.E.str.contains(">")] # 包含某个字符,contains筛选的其实是正则表达式
(3) df[df.F.isin(['1'])] # 在列表内

14-数据选择

(1) train5['A'] # 单个的列
(2) train5[0:3] # 行
(3) train5.loc[:5,] #(等同train5.loc[:5,:]),index筛选
(4) train5.loc[train5.time_interval_day==10,:] 
(5) train5.iloc[:,] # iloc只能用数字了

15-给DataFrame添加一列

例如:给train5新添加一列'travel_time_new'
train5['travel_time_new'] = train5_tmp['travel_time'].values
注意:
这样赋值的前提是:
(1)train5的行数要和等号右边的行数一样多。
(2)train5_tmp['travel_time']最好加上.values,因为可能train5_tmp经过一系列操作索引更改了,那么可能Series 元素索引顺序与train5索引不一致,导致赋值混乱!

参考文献:
(1)Python数据处理:Pandas模块的 12 种实用技巧:
http://python.jobbole.com/85742/
(2)Python基于pandas的数据处理(一):
http://www.cnblogs.com/big-face/p/5418416.html
(3)Python数据分析之pandas学习:
http://www.cnblogs.com/nxld/p/6058591.html 最后一个强烈推荐!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读