【Python笔记:Pandas查询手册】

阅读: 评论:0

【Python笔记:Pandas查询手册】

【Python笔记:Pandas查询手册】

Python笔记:Pandas查询手册

  • DataFrame创建
    • DataFrame的创建有几种方式
    • Dataframe索引
    • Dataframe表头起名
    • Dataframe属性
  • DataFrame索引
    • 索引对象
    • Pandas索引操作
      • 重新索引
      • 更换索引
      • 索引和选取
        • Series结构索引切片
      • DataFrame的行和列选取都有具体的方法
        • 1. 选取列:列索引标签或属性形式
        • 2. 选取行:行位置或行索引标签(loc()或iloc()方法)

DataFrame创建

DataFrame的创建有几种方式

import numpy as np
from pandas import Series,DataFrame
import pandas as pd# 1.二维数组创建,自动生成行索引和列索引
DataFrame(np.arange(10).reshape(2,5))# ====结果====
0	1	2	3	4
0	0	1	2	3	4
1	5	6	7	8	9
# 2.字典创建,注意字典的数据格式:字典的值是数组、列表或元组
data = {'name':['张三', '李四', '王五', '小明'],'sex':['female', 'female', 'male', 'male'],'year':[2001, 2001, 2003, 2002],'city':['北京', '上海', '广州', '北京']
}
df = DataFrame(data)
df    #注意生成的DataFrame的列索引和原始字典中键、值的关系#====结果====name	sex	year	city
0	张三	female	2001	北京
1	李四	female	2001	上海
2	王五	male	2003	广州
3	小明	male	2002	北京
# 3.嵌套字典创建
data2 = {'sex':{'张三':'female','李四':'female','王五':'male'},'city':{'张三':'北京','李四':'上海','王五':'广州'}
}
df2 = DataFrame(data2)
df2#====结果====sex	city
张三	female	北京
李四	female	上海
王五	male	广州

Dataframe索引

#指定列索引顺序
df = DataFrame(data, columns=['name', 'sex', 'year', 'city'])  
df
#====结果====
name	sex	year	city
0	张三	female	2001	北京
1	李四	female	2001	上海
2	王五	male	2003	广州
3	小明	male	2002	北京
#指定行索引和列索引
df = DataFrame(data, columns=['name', 'sex', 'year', 'city'],index=['a', 'b', 'c', 'd'])  
df
#====结果====name	sex	year	city
a	张三	female	2001	北京
b	李四	female	2001	上海
c	王五	male	2003	广州
d	小明	male	2002	北京

Dataframe表头起名

df.index.name = 'id'
df.columns.name = 'std_info'df
#====结果====
std_info	name	sex	year	city
id				
a	张三	female	2001	北京
b	李四	female	2001	上海
c	王五	male	2003	广州
d	小明	male	2002	北京

Dataframe属性

# 1.DataFrame的数据转换为二维数组
df.values
#====结果====
array([['张三', 'female', 2001, '北京'],['李四', 'female', 2001, '上海'],['王五', 'male', 2003, '广州'],['小明', 'male', 2002, '北京']], dtype=object)
# 2.DataFrame表的行索引、列索引
df.index
df.columns
#====结果====
Index(['a', 'b', 'c', 'd'], dtype='object')
Index(['name', 'sex', 'year', 'city'], dtype='object')

DataFrame索引

索引对象

索引对象Index无法修改,但可以进行遍历

obj = Series([1, -2, 3, -4], index=['a', 'b', 'c', 'd'])
obj
#====结果====
a    1
b   -2
c    3
d   -4
dtype: int64# 1.索引对象不可以修改
index = obj.index
index[1] = 'f'
#====结果====
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-4f995da5e969> in <module>()1 index = obj.index
----> 2 index[1] = 'f'F:Anacondaenvsdata-analysislibsite-packagespandascoreindexesbase.py in __setitem__(self, key, value)1668 1669     def __setitem__(self, key, value):
-> 1670         raise TypeError("Index does not support mutable operations")1671 1672     def __getitem__(self, key):TypeError: Index does not support mutable operations
# 2.索引对象可以索引
index[1]
#====结果====
'b'
# 3.索引对象也是一个集合,因此也可以用in操作符
'sex' lumns
'f' in df.index
#====结果====
True
False

Pandas索引操作

重新索引

注意:reindex() 方法不会改变原来的df结构

obj = Series([1, -2, 3, -4], index=['b', 'a', 'c', 'd'])# 1.重新索引就是重新排序,自动补齐
obj2 = index(['a', 'b', 'c', 'd', 'e'])#默认不填充
obj2#====结果====
a   -2.0
b    1.0
c    3.0
d   -4.0
e    NaN
dtype: float64
obj = Series([1, -2, 3, -4], index=[0,2,3,5])
# 2.method参数指定缺失值填充方式
obj2 = index(range(6),method='ffill')#用前面的值填充
obj3 = index(range(6),method='bfill')#用后面的值填充
obj2
obj3#====结果====
0    1
1    1
2   -2
3    3
4    3
5   -4
dtype: int640    1
1   -2
2   -2
3    3
4   -4
5   -4
dtype: int64
#fill_value指定缺失值填充的值
df3 = index(columns=['name', 'year', 'id'], fill_value=0)
df3
#====结果====
#删去了sex属性,增添了year属性,填充为0name	year	id
a	0.0	0	1.0
b	NaN	0	NaN
c	3.0	0	4.0
d	6.0	0	7.0

更换索引

  1. set_index()将列数据作为行索引
  2. reset_index()将索引作为数据列,与set_index()方法相反
data = {'name':['张三', '李四', '王五', '小明'],'sex':['female', 'female', 'male', 'male'],'year':[2001, 2001, 2003, 2002],'city':['北京', '上海', '广州', '北京']
}
df = DataFrame(data)
df  
#====结果====
name	sex	year	city
0	张三	female	2001	北京
1	李四	female	2001	上海
2	王五	male	2003	广州
3	小明	male	2002	北京
df2 = df.set_index('name')   #注意,不改变df
df2#====结果====sex	year	city
name			
张三	female	2001	北京
李四	female	2001	上海
王五	male	2003	广州
小明	male	2002	北京
df3 = set_index()  #也不改变df2
df3#====结果====
name	sex	year	city
0	张三	female	2001	北京
1	李四	female	2001	上海
2	王五	male	2003	广州
3	小明	male	2002	北京
  1. df.sort_values(by=’ ')
    sort_value方法排序不改变原DataFrame,并且索引不会排序,跟着行一块动,即:索引与行绑定。(除非重新赋予新的df)
data = {'name':['张三', '李四', '王五', '小明'],'grade':[68, 78, 63, 92]
}
df = DataFrame(data)
df
#====结果====name	grade
0	张三	     68
1	李四	     78
2	王五	     63
3	小明	     92# sort_value方法排序不改变原DataFrame,排序之后索引会改变,与Excel不同
df2 = df.sort_values(by='grade')
df2
#====结果====name	grade
2	王五	  63
0	张三   68
1	李四	  78
3	小明	  92
#reset_index之后,原来的列索引被添加为一列,用drop=True去除原索引
df3 = set_index()  
df3#====结果====index	 grade	name
0	2	 63	  王五
1	0	 68	  张三
2	1	 78	  李四
3	3	 92	  小明df4 = set_index(drop=True)
df4
#====结果====grade	name
0	63	王五
1	68	张三
2	78	李四
3	92	小明

索引和选取

Series结构索引切片
obj = Series([1, -2, 3, -4], index=['a', 'b', 'c', 'd'])
# 1.可以通过0~(n-1)索引
obj[1]  
#====结果====
-2
# 2.也可以通过设置的索引标签来索引
obj['b']  
obj[['a','c']]
#====结果====
-2
# 3.切片
obj[0:2]
obj['a':'c']  #利用索引标签索引时,尾端是被包含的
#====结果====
a    1
b   -2
dtype: int64a    1
b   -2
c    3
dtype: int64

DataFrame的行和列选取都有具体的方法

1. 选取列:列索引标签或属性形式
data = {'name':['张三', '李四', '王五', '小明'],'sex':['female', 'female', 'male', 'male'],'year':[2001, 2001, 2003, 2002],'city':['北京', '上海', '广州', '北京']
}
df = DataFrame(data)
df
#====结果====name	sex	year	city
0	张三	female	2001	北京
1	李四	female	2001	上海
2	王五	male	2003	广州
3	小明	male	2002	北京
# 1.取一列
df['city']  #以列索引标签形式,返回Series结构
df.city   #以属性方式,,返回Series结构
df[['city']] #返回DataFrame结构#====结果====
0    北京
1    上海
2    广州
3    北京
Name: city, dtype: object0    北京
1    上海
2    广州
3    北京
Name: city, dtype: objectcity
0	北京
1	上海
2	广州
3	北京
df[['city','sex']]#====结果====city	sex
0	北京	  female
1	上海	  female
2	广州	   male
3	北京	   male

直接选取列时不能使用切片,也没有位置

# df选取多列,不能使用切片!!
df[['sex':'city']]
# df['sex':'city']也不行#====结果====
File "<ipython-input-56-d6386b7eaceb>", line 1df[['sex':'city']]^
SyntaxError: invalid syntax
2. 选取行:行位置或行索引标签(loc()或iloc()方法)

df[2] 会报错,应该使用 df[2:3] 或 df.iloc[2] 来取出第2行,返回Series结构。
以索引位置方式,注意,必须“切片”

#选取行,切片
df.iloc[:3]
#同等于df[:3]
#df[2]会报错,应该使用df[2:3]或df.iloc[2}来取出第2行#====结果====
name	sex	year	city
0	张三	female	2001	北京
1	李四	female	2001	上海
2	王五	male	2003	广州
df2['李四':'小明']  #以行索引标签方式#====结果====sex	year	city
name			
李四	female	2001	上海
王五	male	2003	广州
小明	male	2002	北京
  • 不用loc或iloc,选取行时必须用“切片”方式,选取列时不能使用“切片”。
  • 选取行:行位置或行索引标签(loc()或iloc()方法)
  • loc和iloc可以切片,也可以不切片。loc: locat, iloc:i-integer
  • loc取行数据,不用指定列
df2
#====结果====sex	year	city
name			
张三	female	2001	北京
李四	female	2001	上海
王五	male	2003	广州
小明	male	2002	北京
#按行索引标签选取数据。注意,不能使用df2['张三']
df2.loc['张三']   #====结果====(Series结构)
sex     female
year      2001
city        北京
Name: 张三, dtype: object
df2.loc[['张三']]  #两对[],里面的[]有“组合”的含义#====结果====(df结构)sex	year	city
name			
张三	female	2001	北京
df2.loc[['张三','王五']]  #“张三”和“王五”的组合#====结果====(df结构)sex	year	city
name			
张三	female	2001	北京
王五	male	2003	广州
df2.loc[['张三':'王五']]  #出错,不能用切片来“组合”
# 应该使用 df2.loc['张三':'王五'],包含尾端#====结果====File "<ipython-input-153-e34357cebaa9>", line 1df2.loc[['张三':'王五']]  #出错,不能用切片来“组合”^
SyntaxError: invalid syntax

本文发布于:2024-01-29 04:47:34,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170647485912799.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:Maven操作手册
标签:手册   笔记   Python   Pandas
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23