pandas数据处理学习之二pandas Series访问问题
背景
老石榴初学者欢迎拍砖,接上回Pandas数据处理学习之一的groupby实现分层采样之后,老石榴发现访问分层采样后的df成了一个问题, 因为即使分层采样之后,df的数据的index是不变的。对于初学者的我来说,这可咋整。老石榴今天用比较菜的办法实现了访问+分组。
先上代码
"""
Created on Thu May 9 04:40:12 2019
@author: alfred90
"""
import pandas as pd
import numpy as np
import math as ma
import random as rd
from random import sample
import scipy as sp
data = pd.read_excel("data.xlsx")
gbr = data.groupby("群类别")
gbr.groups
#定义一个字典,明确各类的比例
typicalFracDict = {
1:0.23,
2:0.14,
3:0.09,
4:0.2,
5:0.31
}
def typicalSampling(group,typicalFracDict):
name = group.name
frac = typicalFracDict[name]
return group.sample(frac = frac) #sample()中frac参数为比例参数,令frac = 每一个name的值,即比例,从而实现了按比例的抽样,即分层抽样法
#apply 函数把数据帧传递给第一个参数
result = data.groupby('群类别',group_keys = False).apply(typicalSampling,typicalFracDict)
df = result
class_n = df ['群类别']
print(class_n.values[118])
average = df['平均年龄']
class1 = []; class2=[] ;class3=[];class4=[];class5=[]
for i in range(0,453):
if class_n.values[i]==1:
class1.append(average.values[i])
elif class_n.values[i] == 2:
class2.append(average.values[i])
elif class_n.values[i] == 3:
class3.append(average.values[i])
elif class_n.values[i] == 4:
class4.append(average.values[i])
elif class_n.values[i] == 5:
class5.append(average.values[i])
Class = [class1 , class2 ,class3,class4,class5]
#print(Class)
print(sp.stats.f_oneway(*Class))
方法——df[‘列标题’],df[’’].values(),for循环+if
简单粗暴最有效! 这是老石榴在部队学到的一句话,其实凡事方法对路就好,解决问题就好。今天用到的方法就是:
1.df[‘列标题’],
2.df[’’].values(),
3.for循环+if
访问DataFrame,Series的方法。
选择方法前有必要先看一下数据结构
df = result
class_n = df ['群类别']
把result的赋给df 再把群类别这一列赋给了class_n
老石榴想遍历class_n的每一个行元素,尝试通过class_n[i]的方法,发现不行。
报错: keyboarderror:i 到现在我也不知道为毛!明天我要把它弄清楚
后来用df.values()访问实现了。
但当我写到
for i in range(0,2042):
问题又来了,
结果告诉老石榴IndexError。
原来问题出现在range(0,2042)里,问题在于groupby.apply()后的df,他的size只有452,所以453超出了他的索引范围。通过这次教训发现df.values的用法不受限于index整数,而是有多少访问多少。
今天先写到这。