1.Series和DataFrame

本文介绍了如何使用Python pandas库高效地导入Excel文件,包括指定sheet、列和索引。还详细讲解了Series和DataFrame对象的创建、访问、数据抽取、清洗、排序及索引设置,涉及缺失值处理、重复值删除、异常值检测等实用技巧。
摘要由CSDN通过智能技术生成

0.文件的导入和导出

① Excel

1.导入表格

df=pd.read_excel('1月.xlsx',sheet_name='莫寒')

不指定sheet则导入第一张 

2.导入指定列

df1 = pd.read_excel('1月.xlsx', usecols=[0, 3])            #通过指定列索引号导入第0列、第3列

3.指定行列索引

df1=pd.read_excel('1月.xlsx',index_col=0)  #设置“买家会员名”为行索引
df2=pd.read_excel('1月.xlsx',header=1)     #设置第1行为列索引

header = None则指定为数字

1.Series对象

①创建

s = pd.Series(data,index=)

s2=pd.Series([88,60,75],index=['明日同学','高同学','七月流火'])

②访问

1. []里面放索引名或列表

print(s1['明日同学'])        #通过一个标签索引获取索引值
print(s1[['明日同学','七月流火']])  #通过多个标签索引获取索引值

2.切片

s1['明日同学':'七月流火']

s1[1:4]   输出下标为1,2,3的

③两个属性

s1.index   获取索引

s1.values  获取值

2.DataFrame对象

①创建

1.二维列表创建

data = [[110,105,99],[105,88,115],[109,120,130],[112,115,140]]
name = ['明日','七月流火','高袁圆','二月二']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data, index=name, columns=columns)

2.字典创建

df = pd.DataFrame({
    '语文':[110,105,99],
     '数学':[105,88,115],
     '英语':[109,120,130],
      '班级':'高一7班'
},index=[0,1,2])

键就是列名,只需指定行名index了

②重要属性和函数

 ④数据抽取

1.直接df[列名]

2.loc和iloc属性

前者列名行名,后者数字索引

第一个参数为行参数,第二个为列参数

print(df.loc[['明日','高袁圆']])   
print(df.iloc[[0,2]])           #访问0和2行

同Series,[]里面放行索引名或者行索引名列表

print(df.loc['明日':'二月二']) #从“明日”到“二月二”
print(df.loc[:'七月流火'])     #第1行到“七月流火”
print(df.iloc[0:4])            #第1行到第4行
print(df.iloc[1::])            #第2行到最后1行

注意,iloc[0:4]只有下标0,1,2,3的

print(df.iloc[1::,[0,2]])                      #第2行到最后一行的第1列和第3列
print(df.iloc[:,2])                           #所有行,第3列

 两个参数也差不多

3.df.iat[,]选取某个坐标的数据

4.条件选取

print(df.loc[(df['语文'] > 109)])

》》
        语文  数学  英语
明日     110   105  99.0
二月二   112   115   NaN

⑤数据增删改

1.增

①通过a["列名”],loc函数直接赋值

②或者

df.insert(1,"物理",[90,87,63])

③增加多行数据

df_insert = pd.DataFrame({'语文':[100,123,138],'数学':[120,142,60],'英语':[99,139,99]},index = ['钱多多','童年','无名'])
df1 = df.append(df_insert)

2.删

以下是删除两列,行类似

df1.drop(['数学',"语文"],axis=1,inplace=True)

3.改

①改行标列标

直接赋值,或者用rename函数,以下修改行,修改列同理

df.index=list('1234')
df.rename({'明日':1,'七月流火':2,'高袁圆':3,'二月二':4},axis=0,inplace = True)

②改数据

通过loc,iloc直接赋值

df.loc[:,'语文']=[115,108,112,118]

⑥数据清洗

1.缺失值

df.info()

df.isnull()

df.notnull()

处理:

①删除有缺失值的行,(只要该行有缺失值,就删除)

df.dropna(inplace=True)

②只删除特定列空值的行

df = df.loc[df["宝贝总数量"].notnull()]

③填充空值

df=df["宝贝总数量"].fillna(0)    #此行错误,会出大问题
df["宝贝总数量"]=df["宝贝总数量"].fillna(0)

2.重复值

①检测该行是否与前面行完全相同,返回每行的布尔值

print(df.duplicated())

②删除重复行

print(df.drop_duplicates())
print(df.drop_duplicates(["宝贝标题"],keep="last"))  #keep=False表示去除所有重复行

3.异常值

p = df > 100
print(p)
df = df.loc[p["英语"]]
print(df)

》》
          语文  数学  英语
明日       110   105    99
七月流火   105    88   115
高袁圆     109   120   130
二月二     112   115   140
          语文   数学   英语
明日      True   True  False
七月流火  True  False   True
高袁圆    True   True   True
二月二    True   True   True
          语文  数学  英语
七月流火   105    88   115
高袁圆     109   120   130
二月二     112   115   140

Process finished with exit code 0
p = df.std()
print(p["英语"])

⑦索引设置

1.series重设索引

之前的df.index = 实际上是索引重命名

from pandas import Series
s1=Series([88,60,75],index=[1,2,3])
print(s1)
s1=s1.reindex([1,2])
print(s1)

》》
1    88
2    60
3    75
dtype: int64
1    88
2    60
dtype: int64

2.dataframe重设索引

import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
data = [[110,105,99],[105,88,115],[109,120,130]]
index=['mr001','mr003','mr005']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data, index=index,columns=columns)
print(df)
print(df.reindex(index=['mr001','mr002','mr003','mr004','mr005'],columns=['语文','物理','数学','英语']))

》》
       语文  数学  英语
mr001   110   105    99
mr003   105    88   115
mr005   109   120   130
        语文  物理   数学   英语
mr001  110.0   NaN  105.0   99.0
mr002    NaN   NaN    NaN    NaN
mr003  105.0   NaN   88.0  115.0
mr004    NaN   NaN    NaN    NaN
mr005  109.0   NaN  120.0  130.0

3.设置某列为行索引

df = df.set_index(["买家会员名"])

4.把不连续的索引重新设为连续

df=df.reset_index(drop = Ture)

⑧数据排序与排名

1.排序

df.sort_values(by=['图书名称','销量'],ascending=[True,True])

2.分组排序

df1=df.groupby(["类别"])["销量"].sum().reset_index()
df2=df1.sort_values(by='销量',ascending=False)

3.排名

顺序排名和平均值排名  (1,2,3)(1,2.5,2.5)

df['顺序排名'] = df['销量'].rank(method="first", ascending=False)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值