第五讲 Pandas

Pandas是基于Numpy构建的更高级的数据结构和分析能力的工具包。
核心数据结构:
Series和DataFrame
Series是定长的字典序列
Series基本属性:index和value

import pandas as pd
from pandas import Series,DataFrame
x1 = Series([1,2,3,4])
x2 = Series(data=[1,2,3,4],index=['a','b','c','d'])
d = {'a':1, 'b':2, 'c':3}
x3 = Series(d)
print(x1)
print(x2)

DataFrame类似于数据库表,可看成相同index的Series组成的字典类型。

data = {'Chinese':[66,77,88,67,99],
       'English':[77,88,77,66,77],
       'Math':[88,99,88,78,87]}
df1 = DataFrame(data)
df2 = DataFrame(data,index=['zf','gy','zy','hz','dw'], #行索引
                columns=['English','Math','Chinese']) #列索引
print(df1)
print(df2)

输出:
在这里插入图片描述

数据的导入与导出

score=DataFrame(data)
score.to_excel('score.xlsx') #导出
score1=DataFrame(pd.read_excel('score.xlsx')) #导入

数据清洗

  1. 删除DataFrame中不必要的列和行
df2=df2.drop(["zf"]) #默认删除行index
df2=df2.drop(['English'],1)#axis=1,删除列columns
  1. 重命名列名columns
df2.rename(columns ={'Chinese':'YUwen','English':'yingyu'},inplace=True)
  1. 去除重复的值
df = df.drop_duplicates() #去除重复的行,index相同,数据也一样
  1. 格式问题
    更改数据格式
df2['Chinese'].astype('str')
import numpy as np
df2['Chinese'].astype(np.int64)

删除符号

df2['Chinese'].astype('str') #先将字段中的int值转化为string
df2['Chinese']=df2['Chinese'].map(str.strip) #删除左右两边的空格
df2['Chinese']=df2['Chinese'].map(str.lstrip)
df2['Chinese']=df2['Chinese'].map(str.rstrip)
df2['Chinese']=df2['Chinese'].str.strip('7')#删除字段中的某个字符

大小写转化

df2.columns=df2.columns.str.upper() #全部大写
df2.index=df2.index.str.lower() #全部小写
df2.columns=df2.columns.str.title() #首字母大写

查找空值
用Pandas的isnull函数进行查找

df.isnull() #表中哪里有空值,bool
df.isnull().any() #哪列有空值,bool

用apply函数对数据进行清洗

df['name']=df['name'].apply(str.upper) #对某列数值进行大写转化

定义函数,在apply中使用

def double_df(x): 
    return 2*x
df['Chinese']=df["Chinese"].apply(double_df) #简单函数

def plus(df,n,m):
    df['new']=df['Chinese']*n+df['English']*m
    return df
df=df.apply(plus,axis=1,args=(2,3)) #axis=1按列为轴进行操作,传递两个参数

数据统计

在这里插入图片描述
数据合并

df1=DataFrame({'name':['zf','gy','a','b','c'],'data1':range(5)})
df2=DataFrame({'name':['zf','gy','x','y','z'],'data2':range(5)})
df3=pd.merge(df1,df2,on='name') #基于指定列连接
df4=pd.merge(df1,df2,how='inner') #inner内连接,键的交集
df5=pd.merge(df1,df2,how='left') #left左连接,第一个表为主
df6=pd.merge(df1,df2,how='right') #right右连接,以第二个表为主
df7=pd.merge(df1,df2,how='outer') #外连接,求并集

用SQL方式打开Pandas

打开cmd运行:pip install pandasql
在这里插入图片描述

import pandas as pd
from pandas import DataFrame
from pandasql import sqldf,load_meat,load_births
df1=DataFrame({'name':['zf','gy','a','b','c'],'data1':range(5)})
pysqldf=lambda sql:sqldf(sql,globals())
sql="select * from df1 where name='zf'"
print(pysqldf(sql))

运行结果:
在这里插入图片描述

lambda argument_list: expression

lambda定义匿名函数,上例中输入参数为sql,返回函数sqldf对sql的运行结果。

练习题

创建数据表并清洗,新增一列总和,计算三科成绩之和。
在这里插入图片描述

df=DataFrame({'Chinese':['66','95','95','90','80','80'],
             'English':['65','85','92','88','90','90'],
             'Math':['','98','96','77','90','90']},index=['zf','gy','zy','hz','dw','dw'])

df=df.drop_duplicates()# 去除重复值
df.rename(columns={'Chinese':'语文','English':'英语','Math':'数学'},inplace=True) #将英文换成中文

df1=DataFrame(pd.read_excel('C:\\Users\\五月\\Desktop\\text.xlsx')) #读取创建的表格
df1=df1.drop_duplicates() # 去除重复值
df1.isnull().any() #判断哪列有空值
df1['数学'].fillna(df1['数学'].mean(),inplace=True) #用平均值来填补空值
def sum_score(df): #定义和函数
    df1['总分']=df1['语文']+df1['数学']+df1['英语']
    return df
df1=df1.apply(sum_score,axis=1) #按列运行函数

运行结果:
在这里插入图片描述

<think>好的,用户想知道如何用Pandas获取DataFrame或Series的元素值。首先,我需要回忆Pandas中常用的数据访问方法。记得有几种方式,比如使用loc、iloc、at、iat,还有直接通过列名和索引。 先处理Series的情况。Series是一维的,所以用户可能通过索引位置或索引标签来获取值。比如s.iloc[0]或者s['label']。然后是DataFrame,二维结构,需要行列信息。loc和iloc主要基于标签和位置,而at和iat用于快速访问标量值,效率更高。 然后要检查用户的引用资料,确保回答符合提供的资料内容。引用[2]提到了df.iloc[5].at['B']和iat,说明这些方法适用。引用[3]中的Series示例显示可以通过索引访问,比如data[0]。引用[4]中提到了pop和insert,可能涉及列操作,但用户的问题是关于获取元素值,所以可能需要强调loc/iloc和at/iat的区别。 需要分点回答,结构清晰。先Series,再DataFrame。每种数据结构下,列出不同的方法,比如位置索引、标签索引、布尔索引等。同时,要注意提到这些方法的适用场景,比如at和iat适用于快速访问单个元素,而loc和iloc适合范围或条件筛选。 可能还需要提到布尔索引,比如通过条件筛选数据,这在引用中没有提到,但属于常见操作,应该包含进去。例如df[df['A'] > 0]可以获取符合条件的行。 还要注意示例代码的正确性,比如使用正确的语法,比如逗号分隔行列,或者使用条件表达式。确保用户能复制代码直接运行测试。 最后,生成相关问题,可能涉及不同方法的区别、性能比较、处理缺失值等。这些问题需要基于回答内容,帮助用户进一步学习。</think>### 使用Pandas获取DataFrame或Series元素值的方法 #### 1. **Series元素值的获取** - **通过位置索引**:使用`iloc`方法,传入整数位置。例如: ```python import pandas as pd s = pd.Series([1, 3, 5, 7], index=['a', 'b', 'c', 'd']) print(s.iloc[0]) # 输出第一个元素:1 ``` - **通过标签索引**:直接使用`[]`或`loc`方法。例如: ```python print(s['a']) # 输出标签为'a'的元素:1 print(s.loc['b']) # 输出标签为'b'的元素:3 ``` #### 2. **DataFrame元素值的获取** - **通过行、列标签**:使用`loc`方法指定行和列标签。例如: ```python df = pd.DataFrame({'A': [1, 2, 3], 'B': ['x', 'y', 'z']}, index=['row1', 'row2', 'row3']) print(df.loc['row1', 'A']) # 输出行标签为'row1'、列标签为'A'的值:1 [^2] ``` - **通过行、列位置**:使用`iloc`方法传入整数位置。例如: ```python print(df.iloc[0, 1]) # 输出第0行、第1列的值:'x' ``` - **快速访问单个值**:使用`at`(标签)或`iat`(位置)方法,适用于高效访问单个元素。例如: ```python print(df.at['row2', 'B']) # 输出行标签'row2'、列标签'B'的值:'y' [^2] print(df.iat[1, 1]) # 输出第1行、第1列的值:'y' ``` - **通过条件筛选**:使用布尔表达式筛选数据。例如: ```python print(df[df['A'] > 1]) # 输出列'A'中值大于1的所有行 ``` #### 3. **对比与选择** - `loc`和`iloc`适用于范围或条件查询,而`at`/`iat`适合单值高效访问。 - 直接通过列名获取整列数据:`df['A']`返回Series类型,可进一步用索引操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值