老石榴pandas数据处理学习之二pandas Series访问问题

pandas数据处理学习之二pandas Series访问问题背景先上代码方法——df['列标题'],df[''].values(),for循环+if访问DataFrame,Series的方法。背景老石榴初学者欢迎拍砖,接上回Pandas数据处理学习之一的groupby实现分层采样之后,老石榴发现访问分层采样后的df成了一个问题, 因为即使分层采样之后,df的数据的index是不变的。对于初学...
摘要由CSDN通过智能技术生成

背景

老石榴初学者欢迎拍砖,接上回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
结果告诉老石榴IndexError。
原来问题出现在range(0,2042)里,问题在于groupby.apply()后的df,他的size只有452,所以453超出了他的索引范围。通过这次教训发现df.values的用法不受限于index整数,而是有多少访问多少。

今天先写到这。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值