pandas基础操作(1)

pandas
1.表格数据操作;【增删改查】
2.实现多个表格的处理;
3.数据清洗操作: 缺失值,重复值,异常值,数据标准化,数据转换的操作;
4.实现excel的特殊操作:生成透视表,交叉表;
5.完成统计分析;

import pandas as pd
import numpy as np

一、构建dataframe

创建方法一:

df = pd.DataFrame(data=[['ss',20, '男','0831'],['lx',20, '女','0830'],['lx',22, '女','0830']], 
                  index=['a','c', 'b'], 
                  columns=['name','age','sex','class'],)
print(df)
  name  age sex class
a   ss   20   男  0831
c   lx   20   女  0830
b   lx   22   女  0830

创建方法二:

df2 = pd.DataFrame(data={'name':['ss','lx'],
                   'age':[20, 18], 
                   'sex':['男','女'], 
                   'class':['0831','0830']})
print(type(df2))
<class 'pandas.core.frame.DataFrame'>

二、dataframe属性

print('df结构:\n', df.shape)
print('df维度:\n', df.ndim)
print('df元素个数:\n', df.size)

print('df数据类型:\n', df.dtypes)
print('df的列索引:\n', df.columns)
print('df的行索引:\n', df.index)
print('df的元素:\n', type(df.values)) #<class 'numpy.ndarray'>
df结构:
 (3, 4)
df维度:
 2
df元素个数:
 12
df数据类型:
 name     object
age       int64
sex      object
class    object
dtype: object
df的列索引:
 Index(['name', 'age', 'sex', 'class'], dtype='object')
df的行索引:
 Index(['a', 'c', 'b'], dtype='object')
df的元素:
 <class 'numpy.ndarray'>

三、df的查找

series是一维的类型,只有一个轴

  1. 切一列值的方法
ser = df['name'] # 一维的切法,返回的是series类型
print(type(ser)) # <class 'pandas.core.series.Series'>
<class 'pandas.core.series.Series'>

2.切多列值的方法

df[['name', 'age']][:2]
nameage
ass20
clx18
  1. 索引; df.loc[行索引名称/条件, 列的索引名称]
print(df)
  name  age sex class
a   ss   20   男  0831
c   lx   18   女  0830
b   lx   22   女  0830
# print(df.loc['a', 'name'])
# print(df.loc[['a','b'],  'name'])
# print(df.loc[['a','b'], ['name','age']])
print(df.loc[:'b', 'name']) # 前闭后闭
a    ss
c    lx
b    lx
Name: name, dtype: object

3.条件切片

例: 获取所有年龄大于18岁的同学

mask = df['age'] > 18
print(mask)
a     True
c    False
b     True
Name: age, dtype: bool
df.loc[mask, 'name']
a    ss
b    lx
Name: name, dtype: object

例: 获取所有年龄大于18岁的女同学

mask1 = df['age']>18
mask2 = df['sex'] == '女'
mask3 = mask1 & mask2
df.loc[mask3, :]
nameagesexclass
blx220830

df.iloc[行的位置索引, 列的位置索引]

print(df)
  name  age sex class
a   ss   20   男  0831
c   lx   18   女  0830
b   lx   22   女  0830
df.iloc[:, 1]
a    20
c    18
b    22
Name: age, dtype: int64
df.iloc[:2, 2:] # 前闭后开
sexclass
a0831
c0830
df.iloc[-1, :].index
Index(['name', 'age', 'sex', 'class'], dtype='object')

4.df增加方法

(1)增加一列:

df['address'] = ['北京','上海','北京']

print(df)
  name  age sex class address
a   ss   20   男  0831      北京
c   lx   18   女  0830      上海
b   lx   22   女  0830      北京
df['address'] = '北京'
print(df)
  name  age sex class address
a   ss   20   男  0831      北京
c   lx   18   女  0830      北京
b   lx   22   女  0830      北京

(2)增加一行:

df_mini = pd.DataFrame(data={'name':['ss','lx'],
                   'age':[20, 18], 
                   'sex':['男','女'], 
                   'class':['0831','0830']},index=['a','b'])

df3 = df.append(df_mini,ignore_index=True ) 
#ignore_index: 表示忽略原始索引,重新设置索引

print(df3)
  address  age class name sex
0      北京   20  0831   ss   男
1      北京   18  0830   lx   女
2      北京   22  0830   lx   女
3     NaN   20  0831   ss   男
4     NaN   18  0830   lx   女
  1. 删除方法

inplace: 表示是否对原表进行修改,True为直接修改原始表格, False为不修改;

#删除列:
df3.drop(labels=['address','class'], axis=1)
agenamesex
020ss
118lx
222lx
320ss
418lx
df3.drop(labels=[0, 2], axis=0, inplace=True)
print(df3)
  address  age class name sex
3     NaN   20  0831   ss   男
4     NaN   18  0830   lx   女
  1. df更改数值方法
print(df)
  name  age sex class address
a   ss   20   男  0831      北京
c   lx   18   女  0830      北京
b   lx   22   女  0830      北京
# 例: 将名字为“lx”的人的班级改为“有问题”;
df.loc[df['name']=='lx', 'class'] = '有问题'
print(df)
  name  age sex class address
a   ss   20   男  0831      北京
c   lx   18   女   有问题      北京
b   lx   22   女   有问题      北京

四、统计分析

  1. numpy 统计方法:
print(df)
  name  age sex class address
a   ss   20   男  0831      北京
c   lx   18   女   有问题      北京
b   lx   22   女   有问题      北京
#2.  延用numpy中的10个统计分析方法:
np.mean(df['age'])
20.0
#3.  其它方法:
np.ptp(df['age'])   #极差 : max-min
4
print(df)
  name  age sex class
a   ss   20   男  0831
c   lx   20   女  0830
b   lx   22   女  0830
#4.  pandas中的方法:
# (1) 针对series:
# df['age'].min()                              #df与series中通用
# df['age'].std()                              #df与series中通用
# df['age'].argmax()                           #只能在series中使用

# df['name'].mode()  # 众数                    #df与series中通用
# df['name'].count() # 非空数目                #df与series中通用
# df['name'].value_counts() # 频数统计         #只能在series中使用
#(2) 针对df类型
print(df)
df['grade'] = [98, 90, 92]
  name  age sex class  grade
a   ss   20   男  0831     98
c   lx   20   女  0830     90
b   lx   22   女  0830     92
print(df[['age', 'grade']].idxmax(axis=1)) # 最大值索引, 横向比较; 
a    grade
c    grade
b    grade
dtype: object
print(df[['age', 'grade']].idxmax(axis=0)) # 最大值索引,纵向比较;【一维,二维都可以使用]
age      b
grade    a
dtype: object
print(df.mode()) #众数 【ser和pandas中都可以使用】
  name   age  sex class  grade
0   lx  20.0    女  0830     90
1  NaN   NaN  NaN   NaN     92
2  NaN   NaN  NaN   NaN     98
print(df[['age','grade']].describe())
             age      grade
count   3.000000   3.000000
mean   20.666667  93.333333
std     1.154701   4.163332
min    20.000000  90.000000
25%    20.000000  91.000000
50%    20.000000  92.000000
75%    21.000000  95.000000
max    22.000000  98.000000
print(df[['name','sex']].describe())

"""
describe()作用在类别型df中返回值:
count:非空数目
unique: 去重之后有几个值;
top:众数
freq:众数出现的频数
"""
       name sex
count     3   3
unique    2   2
top      lx   女
freq      2   2
print(df[['age','name']].describe())
             age
count   3.000000
mean   20.666667
std     1.154701
min    20.000000
25%    20.000000
50%    20.000000
75%    21.000000
max    22.000000、
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值