pandas python2_python pandas二维数据分析

今天学习了运用pandas跟numpy实现二维数据的清洗跟分析,总的来说我学习速度太快,其实根基并不稳,所以在此等于重新敲一遍代码并且分析步骤内容,对今天的学习也是一种巩固.

1.shift函数运用(针对总体数据计算每(天/月/日)数据)

#导入数据

import pandas as pd

entries_and_exits = pd.DataFrame({

'ENTRIESn': [3144312, 3144335, 3144353, 3144424, 3144594,

3144808, 3144895, 3144905, 3144941, 3145094],

'EXITSn': [1088151, 1088159, 1088177, 1088231, 1088275,

1088317, 1088328, 1088331, 1088420, 1088753]

})

这是一组dataframe数据,结果以数据框形式存在

作业目的是得到两个数据的每天的客流量,处理过程很简单:即用每组数据的下一个数据减去上一个数据,此题可以先定义一个函数,然后对全文运用.

#定义减法函数

def get_hourly_entries_and_exits(entries_and_exits):

df =entries_and_exits - entries_and_exits.shift()

#shift函数是将所有数据向下位移,默认值periods=1,可以做修改

return df

print get_hourly_entries_and_exits(entries_and_exits)

2.applymap函数运用,定义一个函数,对全局使用

grades_df = pd.DataFrame(

data={'exam1': [43, 81, 78, 75, 89, 70, 91, 65, 98, 87],

'exam2': [24, 63, 56, 56, 67, 51, 79, 46, 72, 60]},

index=['Andre', 'Barry', 'Chris', 'Dan', 'Emilio',

'Fred

', 'Greta', 'Humbert', 'Ivan', 'James']

)

目的是将上述数据的成绩转换成我们想要的格式:90分以上为A,80以上为B,以此类推.过程:同理定义函数,对全局使用.

def convert_grades(grades):

if grades >= 90:

return "A"

#elif = elise if

elif grades >= 80:

return "B"

elif grades >= 70:

return "C"

elif grades >= 60:

return "D"

elif grades > 0:

return "F"

print grades_df.applymap(convert_grades)

3.apply函数运用,apply与mapapply类似,但是apply可以在不知道数据情况的前提下对数据进行处理,下题中数据与上题一样,但是我们需要在数据比例上给每位学生定义成绩.

grades_df = pd.DataFrame(

data={'exam1': [43, 81, 78, 75, 89, 70, 91, 65, 98, 87],

'exam2': [24, 63, 56, 56, 67, 51, 79, 46, 72, 60]},

index=['Andre', 'Barry', 'Chris', 'Dan', 'Emilio',

'Fred', 'Greta', 'Humbert', 'Ivan', 'James']

)

运用qcut函数将数组分类,例如:

pd.qcut(range(5), 3, labels=["good","medium","bad"])

output:

[good, good, medium, bad, bad]

Categories (3, object): [good < medium < bad]

此题同解:

def convert_grades_curve(exam_grades):

return pd.qcut(exam_grades,

[0, 0.1, 0.2, 0.5, 0.8, 1],

labels=['F', 'D', 'C', 'B', 'A'])

print convert_grades_curve(grades_df['exam1'])

print grades_df.apply(convert_grades_curve)

4.计算标准值,即每个值与均值相差多少个STD

def standardize(df):

change = (df - df.mean()) / df.std()

return change

print grades_df.apply(standardize)

5.pandas数据向量计算

import numpy as np

import pandas as pd

df = pd.DataFrame({

'a': [4, 5, 3, 1, 2],

'b': [20, 10, 40, 50, 30],

'c': [25, 20, 5, 15, 10]

})

print df.apply(np.mean)

print df.apply(np.max

这里计算了数据的均值和最大值,那如果计算第二大的值是多少?我自己的解法是,筛选出除了最大值剩余的值,再从中决定最大值.

print df[df < df.max() ].max()

另一种解法,编写函数,先对数据进行降序排序(ascending = False),然后返回数值中[1]该位置的数据即可.

def second_largest_in_column(column):

#sort_values对数据进行排序,默认升序排序

sort_column = column.sort_values(ascending = False)

return sort_column.iloc[1]

def second_largest(df):

return df.apply(second_largest_in_column)

second_largest(df)

下面提供几种pandas的dataframe与numpy的Series数据计算

import pandas as pd

s = pd.Series([1, 2, 3, 4])

df = pd.DataFrame({

0: [10, 20, 30, 40],

1: [50, 60, 70, 80],

2: [90, 100, 110, 120],

3: [130, 140, 150, 160]

})

print df

print '' # Create a blank line between outputs

print df + s

s = pd.Series([1, 2, 3, 4])

df = pd.DataFrame({0: [10], 1: [20], 2: [30], 3: [40]})

print df

print '' #创建一个空格

print df + s

s = pd.Series([1, 2, 3, 4])

df = pd.DataFrame({0: [10, 20, 30, 40]})

print df

print ''

print df + s

s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])

df = pd.DataFrame({

'a': [10, 20, 30, 40],

'b': [50, 60, 70, 80],

'c': [90, 100, 110, 120],

'd': [130, 140, 150, 160]

})

print df

print ''

print df + s

s = pd.Series([1, 2, 3, 4])

df = pd.DataFrame({

'a': [10, 20, 30, 40],

'b': [50, 60, 70, 80],

'c': [90, 100, 110, 120],

'd': [130, 140, 150, 160]

})

print df

print df + s

总结:对同一个标签的数据,数据会进行向量运算,对于标签数据不同的数据,简单相加会使得数据框扩充,但是对于不相同的标签数据会以NA填充.

6.dataframe计算标准值

之前已经计算过很多次标准值,这里是在dataframe中计算

grades_df = pd.DataFrame(

data={'exam1': [43, 81, 78, 75, 89, 70, 91, 65, 98, 87],

'exam2': [24, 63, 56, 56, 67, 51, 79, 46, 72, 60]},

index=['Andre', 'Barry', 'Chris', 'Dan', 'Emilio',

'Fred', 'Greta', 'Humbert', 'Ivan', 'James']

)

s = grades_df.mean()

t = grades_df.std()

(s - grades_df) / t

6.groupby函数运用

在R中已经学过groupby函数的基本用法,大致就是将数据按照所想要的标签进行划分.

subway_df = pd.read_csv('nyc-subway-weather.csv') #导入数据

subway_df.head()

grouped_data = subway_df.groupby('day_week').mean()['ENTRIESn_hourly']

grouped_data

把数据按照每周的数据进行排列,然后按照每小时进入人数进行生成数据组,得出从星期一到星期天进站人数的数据.最后画图分析

%pylab inline

import seaborn as sns

grouped_data.plot()

接下来就要正式进入OSM项目了,今天刷XML格式有点晕,看来学习点真的太多,因为对我现在来说,数据只是以数据框形式展现给我的直观感受,最多只是CSV,EXCEL格式数据,可是对于数据分析来说,网站数据才是关键,学会爬取网站数据才是关键,加油,接下来接触的数据格式会得到一个升华,相信我也能得到进步.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值