栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Pandas入门知识学习

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Pandas入门知识学习

目录

Pandas基础知识学习

一、数据处理对象

Pandas中的数据结构SeriesDataframe 二、读取CSV格式数据

读取CSV查看前n行查看后n行修改列名 三、排序操作

对索引进行排序按行排序按值排序 四、删除操作五、基本的算术运算

算术运算(+,-,*,/) 六、去重操作

duplicated()drop_duplicates() 七、层次化索引

层次化索引索引方式内层选取数据重塑

Pandas基础知识学习

Pandas比较适合处理结构化的数据,如序列数据,表格数据等,例如csv文件,利用pandas可以快速的对数据进行复杂的转换过滤等操作。
本文为机器学习课程笔记,记录了一些基础操作。

一、数据处理对象 Pandas中的数据结构

Series: 一维数组,类似于Python中的基本数据结构list,区别是Series只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。就像数据库中的列数据;Dataframe: 二维的表格型数据结构。很多功能与R中的data.frame类似。可以将Dataframe理解为Series的容器;Panel:三维的数组,可以理解为Dataframe的容器。 Series

Series是一个一维的类似的数组对象,包含一个数组的数据(任何NumPy的数据类型)和一个与数组关联的数据标签,被叫做索引 。简而言之就是类似于带有索引的数组,举例如下:

from pandas import Series,Dataframe

obj = Series([4, 7, -5, 3])
obj2 = Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])

print(obj)
print(obj2)
'''
0    4
1    7
2   -5
3    3

dtype: int64
d    4
b    7
a   -5
c    3
dtype: int64
'''

如果你有一些数据在一个Python字典中,你可以通过传递字典来从这些数据创建一个Series,只传递一个字典的时候,结果Series中的索引将是排序后的字典的键。

sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
obj3=Series(sdata)
print(obj3)
'''
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64
'''
Dataframe

Dataframe是一个表格型的数据结构,是以一个或多个二维块存放的数据表格(层次化索引),Dataframe既有行索引还有列索引,它有一组有序的列,每列既可以是不同类型(数值、字符串、布尔型)的数据,或者可以看做由Series组成的字典。

Dataframe创建:

from pandas import Series,Dataframe

dictionary = {'state': ['0hio', '0hio', '0hio', 'Nevada', 'Nevada'],
              'year': [2000, 2001, 2002, 2001, 2002],
              'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
frame = Dataframe(dictionary)
print(frame)
'''    state  year  pop
0    0hio  2000  1.5
1    0hio  2001  1.7
2    0hio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9 '''

修改行名:

frame = Dataframe(dictionary, index=['one', 'two', 'three', 'four', 'five'])

添加修改:

frame['add']=[0,0,0,0,0]

添加Series类型:

value = Series([1,3,1,4,6,8],index = [0,1,2,3,4,5])
frame['add1'] = value
#输出
		state  year  pop  add  add1
one      0hio  2000  1.5    0   NaN
two      0hio  2001  1.7    0   NaN
three    0hio  2002  3.6    0   NaN
four   Nevada  2001  2.4    0   NaN
five   Nevada  2002  2.9    0   NaN
二、读取CSV格式数据

此部分仅介绍简单的用法

读取CSV
# 如果数据集中有中文的话,最好在里面加上 encoding = 'gbk' ,以避免乱码问题。
df = pd.read_csv('文件名', header=0)
查看前n行
df.head(5)
查看后n行
df.tail(5) 
修改列名
df.columns = ['','']  
三、排序操作 对索引进行排序

Series用sort_index()按索引排序,sort_values()按值排序;
Dataframe也是用sort_index()和sort_values()。

from pandas import Series,Dataframe
import numpy as np

obj = Series(range(4), index=['d','a','b','c'])
print(obj.sort_index())
"""a    1
b    2
c    3
d    0
dtype: int64"""

frame = Dataframe(np.arange(8).reshape((2,4)),index=['three', 'one'],columns=['d','a','b','c'])
print(frame)
'''       
	   d  a  b  c
three  0  1  2  3
one    4  5  6  7
'''
print(frame.sort_index())
'''
	   d  a  b  c
one    4  5  6  7
three  0  1  2  3
'''
按行排序
pyprint(frame.sort_index(axis=1, ascending=False))
''' 
       d  c  b  a
three  0  3  2  1
one    4  7  6  5
'''
按值排序

Series:

obj = Series([4, 7, -3, 2])
print(obj.sort_values())
'''2   -3
3    2
0    4
1    7
dtype: int64'''

Dataframe:

frame = Dataframe({'b':[4, 7, -3, 2], 'a':[0, 1, 0, 1]})
print(frame.sort_values(by='b'))    #Dataframe必须传一个by参数表示要排序的列
'''
   b  a
2 -3  0
3  2  1
0  4  0
1  7  1
'''
四、删除操作

需要注意的是drop()返回的是一个新对象,原对象不会被改变。

删除Series的一个元素:

from pandas import Series,Dataframe
import numpy as np

ser = Series([4.5,7.2,-5.3,3.6], index=['d','b','a','c'])
print(ser.drop('c'))
'''
d    4.5
b    7.2
a   -5.3
dtype: float64'''

删除Dataframe的行或列:

df = Dataframe(np.arange(9).reshape(3,3), index=['a','c','d'], columns=['oh','te','ca'])
print(df)
'''oh  te  ca
a   0   1   2
c   3   4   5
d   6   7   8'''
print(df.drop('a') )
'''oh  te  ca
c   3   4   5
d   6   7   8'''
print(df.drop(['oh','te'],axis=1))
'''ca
a   2
c   5
d   8'''
五、基本的算术运算 算术运算(+,-,*,/)

Dataframe中的算术运算是df中对应位置的元素的算术运算,如果没有共同的元素,则用NaN代替。

from pandas import Series,Dataframe
import numpy as np

df1 = Dataframe(np.arange(12.).reshape((3,4)),columns=list('abcd'))
df2 = Dataframe(np.arange(20.).reshape((4,5)),columns=list('abcde'))
print(df1+df2)
''' a     b     c     d   e
0   0.0   2.0   4.0   6.0 NaN
1   9.0  11.0  13.0  15.0 NaN
2  18.0  20.0  22.0  24.0 NaN
3   NaN   NaN   NaN   NaN NaN
'''

如果我们想设置默认的其他填充值,而非NaN的话,可以传入填充值。

print(df1.add(df2, fill_value=0))
''' a     b     c     d     e
0   0.0   2.0   4.0   6.0   4.0
1   9.0  11.0  13.0  15.0   9.0
2  18.0  20.0  22.0  24.0  14.0
3  15.0  16.0  17.0  18.0  19.0
'''
六、去重操作 duplicated()

Dataframe的duplicated方法返回一个布尔型Series,表示各行是否是重复行。具体用法如下:

from pandas import Series,Dataframe
import numpy as np

df = Dataframe({'k1':['one']*3 + ['two']*2, 'k2':[1,1,2,3,3]})
print(df)
''' k1  k2
0  one   1
1  one   1
2  one   2
3  two   3
4  two   3
'''
print(df.duplicated())
'''0    False
1     True
2    False
3    False
4     True
dtype: bool
'''
drop_duplicates()

drop_duplicates()用于去除重复的行数,具体用法如下:

print(df.drop_duplicates())
''' k1  k2
0  one   1
2  one   2
3  two   3'''
七、层次化索引 层次化索引

层次化索引使我们能在一个轴上拥有多个(两个以上)索引级别。

from pandas import Series,Dataframe
import numpy as np

data = Series(np.random.randn(8), index = [['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c' ],[1,2,3,1,2,3,1,2]])
print(data)
'''
a  1    0.484934
   2   -1.419830
   3    0.166275
b  1    1.368679
   2    0.229332
   3   -1.121234
c  1   -1.849080
   2   -1.465574
dtype: float64'''
索引方式
print(data['b':'c'])
'''
b  1    1.368679
   2    0.229332
   3   -1.121234
c  1   -1.849080
   2   -1.465574
dtype: float64
'''
内层选取
print(data[:, 2])
'''
a   -1.419830
b    0.229332
c   -1.465574
dtype: float64
'''
数据重塑

将Series转化成Dataframe:

print(data.unstack())
'''  1         2         3
a  1.413489 -1.967354  1.853173
b -0.847036 -1.874832  0.046083
c  1.319329 -0.594135       NaN
'''
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/769107.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号