pandas

语句定义格式

import pandas as pd
s=pd.Series( data, index, dtype, copy)

data 输入的数据,可以是列表、常量、ndarray 数组等。

index 索引值必须是惟一的,如果没有传递索引,则默认为 np.arrange(n)。

dtypedtype 表示数据类型,如果没有提供,则会自动判断得出。

copy 表示对 data 进行拷贝,默认为 False。

也可以使用数组、字典、标量值或者 Python 对象来创建 Series 对象。

========================================

创建一个空的Series对象

import pandas as pd
import numpy as np
s=pd.Series([],dtype='float64')
print(s)

使用矩阵ndarray创建Series对象

import pandas as pd
import numpy as np
data=np.array(['a','b','c','d'])
s=pd.Series(data)
print(s)

没有传递任何索引,所以索引默认从 0 开始分配 ,其索引范围为 0 到len(data)-1,即 0 到 3。这种设置方式被称为“隐式索引”

=======================================

显示索引

import pandas as pd
import numpy as np
data=np.array(['a','b','c','d'])
s=pd.Series(data,index=[101,102,103,104])
print(s)

python字典dict创建Series对象

没有传递索引时

import pandas as pd
import numpy as np
dict1={'aa001':'小虎','bb001':'小杰','cc001':'小阳','dd001':'小超'}
pd2=pd.Series(dict1)
print(pd2,type(pd2))

index参数传递索引时

import pandas as pd
import numpy as np
dict1={'aa001':'小虎','bb001':'小杰','cc001':'小阳','dd001':'小超'}
pd2=pd.Series(dict1)
print(pd2,type(pd2))

小总结:

1.如果一开始没有索引,index的作用是加索引,如果超出值的个数,报错
2.如果一开始有索引,index的作用是取对应的索引,如果索引没有的话,值对应NaN

标量固定值创建

import pandas as pd
import numpy as np
pd3=pd.Series(dict1,index=['aa001','cc001','dd001'])
print(pd3,type(pd3))

Series

位置索引访问

import pandas as pd
import numpy as np
pd3=pd.Series(dict1,index=['aa001','cc001','dd001'])
print(pd3,type(pd3))
pd4=pd.Series(100,index=[101,102,103,104,105])
print(pd4,type(pd4))

索引标签访问

import pandas as pd
import numpy as np
s = pd.Series([1, 2, 3, 4, 5], index = ['a', 'b', 'c', 'd', 'e'])
print(s[2])

如果索引不是默认的话,需要我们使用定义的索引来获取,如果数据是列表这样的本身就有索引的数据的话,可以通过0-n的方式获取

=====================================

通过切片的方式访问 Series 序列中的数据

import pandas as pd
import numpy as np
s = pd.Series([1, 2, 3, 4, 5], index = ['a', 'b', 'c', 'd', 'e'])
print(s[3:]) #从第三行开始取
print(s[:3]) #倒着取三行
print(s[5:]) #从第五行开始取

索引值是左闭右开

=====================================

索引标签访问(常用!)##

Series 类似于固定大小的 dict,把 index 中的索引标签当做 key,而把 Series 序列中的元素值当做 value,然后通过 index 索引标签来访问或者修改元素值。

====================================

使用索标签访问单个元素值

如果不存在会报错 KeyError: 'f'

import pandas as pd
import numpy as np
s1=pd.Series([6,7,8,9,10],index = ['a', 'b', 'c', 'd', 'e'])
print(s['b'])

使用索引标签访问多个元素值

import pandas as pd
import numpy as np
s1=pd.Series([6,7,8,9,10],index = ['a', 'b', 'c', 'd', 'e'])
print(s1[['a','b']])

Series常用属性

名称 属性
axes 以列表的形式返回所有行索引标签。
dtype 返回对象的数据类型。
ndim 返回输入数据的维数。
size 返回输入数据的元素数量。
values 以 ndarray 的形式返回 Series 对象。
index 返回一个RangeIndex对象,用来描述索引的取值范围。
empty 返回一个空的 Series 对象。

===================================

随机创建一个Series数据

import pandas as pd
import numpy as np
array1=np.array([11,22,33,44,55,66])
pd3=pd.Series(array1,index=[101,102,103,104,105,106])
print(pd3,type(pd3))

axes

import pandas as pd
import numpy as np
s=pd.Series(np.random.random(5))
print(s.axes)

dtype

import pandas as pd
import numpy as np
s=pd.Series(np.random.randn(5))
print(s.dtype)

empty 返回一个布尔值,用于判断数据对象是否为空

import pandas as pd
import numpy as np
s=pd.Series(np.random.randn(5))
print(s.empty)

ndim 查看序列的维数。因为Series 是一维数据结构,因此它始终返回 1

import pandas as pd
import numpy as np
s=pd.Series(np.random.randn(5))
print(s)
print(s.ndim)

size 返回 Series 对象的大小(长度)

import pandas as pd
import numpy as np
s=pd.Series(np.random.randn(5))
print(s)
print(s.size)

values 以数组的形式返回 Series 对象中的数据。

import pandas as pd
import numpy as np
s=pd.Series(np.random.randn(6))
print(s)
print(s.values)

index 用来查看 Series 中索引的取值范围

import pandas as pd
import numpy as np
s=pd.Series([1,2,5,8],index=['a','b','c','d'])
print(s.index)
s1=pd.Series([1,2,5,8])
print(s1.index)

head() 默认显示前5条

tail() 取后几条 默认取后5条

import pandas as pd
import numpy as np
s=pd.Series([1,2,5,8],index=['a','b','c','d'])
print(s)
print(s.head(2))
print(s.tail(2))
import pandas as pd
import numpy as np

isnull() 和notnull()

isnull():如果为值不存在或者缺失,则返回 True。

notnull():如果值不存在或者缺失,则返回 False。

import pandas as pd
import numpy as np
s=pd.Series([1,2,5,None])
print(pd.isnull(s))
print(pd.notnull(s))

对列操作,默认使用 axis=1 或者使用 “columns”

对行操作,默认使用 axis=0 或者使用 “index”

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
d = {'Name':pd.Series(['小虎','小杰','小龙','小明','小赵','小李','小陈','老李','老王','小唐','老覃','小阳']),
'Age':pd.Series([25,26,25,23,18,29,18,14,19,20,24,21]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

数据创建

df=pd.DataFrame(d)
print(df)

sum()求和

df=pd.DataFrame(d)
print(df.sum())
print(df.sum(axis=1))

mean()求均值

df=pd.DataFrame(d)
print(df.mean())

std()求标准差

df=pd.DataFrame(d)
print(df.std())

注意,平均数相同的两组数据,标准差未必相同。

describe() 函数显示与 DataFrame 数据列相关的统计信息摘要。

df=pd.DataFrame(d)
print(df.describe())

Pandas csv读写文件

read_csv()读文件

传数据字符串,即CSV中的数据字符以字符串形式直接传入:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl

`from io import StringIO
data=('col1,col2,col3\n'
'a,b,1\n'
'a,b,2\n'
'c,d,3')
pd.read_csv(StringIO(data))
pd.read_csv(StringIO(data),dtype=object)

pd.read_csv(data,sep='\t')
pd.read_csv('demo.csv')

pd.read_csv(StringIO(data))
print(pd.read_csv(StringIO(data),dtype=object))

分隔符

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl

data1=pd.read_csv("D:\projects\PyCharmProjects\d10\demo1.csv",encoding='gbk',sep=",|:|;",engine="python",header=0)
data2=pd.read_csv("D:\projects\PyCharmProjects\d10\demo.csv",encoding='gbk',sep=",|:|;",engine="python",header=0)
print(data1)
print(data2)

index_col 这个参数是用来决定读进来的数据哪一列做索引的,这个参数的缺省值是False,就是什么都不做的意思,第一列在Python里被标做1:(从0开始)。

data3=pd.read_csv("D:\projects\PyCharmProjects\d10\demo1.csv",encoding='gbk',index_col=4)
print(data3)

usecols 这个参数可以指定你从文件中读取哪几列。

data4=pd.read_csv("D:\projects\PyCharmProjects\d10\demo1.csv",encoding='gbk',usecols=[4,6])
print(data4)

nrows 指定读取记录多少行

data5=pd.read_csv('D:\projects\PyCharmProjects\d10\demo1.csv',encoding='gbk',nrows=12)
print(data5)

==================================================
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams["font.family"] = "FangSong" # 设置字体
mpl.rcParams["axes.unicode_minus"] = False # 正常显示负号
print(np.random.rand(10,4), type(np.random.rand(10,4)))
list1 = [
[99, 98, 97, 95, 89],
[89, 98, 76, 90, 88],
[76, 90, 98, 89, 89],
[99, 98, 97, 95, 89],
[96, 88, 93, 92, 99],
[94, 92, 98, 93, 81],
[92, 91, 91, 98, 81]
]
array1=np.array(list1)
df=pd.DataFrame(array1,index=['第1次测试','第2次测试','第3次测试','第4次测试','第5次测试','第6次测试','第7次测试'],columns=['第一组','第二组','第三组','第四组','第五组'])
df.plot.bar()
plt.xticks(rotation=360)
plt.show()
`

sep参数是字符型的,代表每行数据内容的分隔符号,默认是逗号,另外常见的还有制表符(\t)、空格等,根据数据的实际情况传值。

数据分隔符默认是逗号,可以指定为其他符号

pd.read_csv(data, sep='\t') # 制表符分隔tab
pd.read_table(data) # read_table 默认是制表符分隔tab>
pd.read_csv(data, sep='|') # 制表符分隔tab
pd.read_csv(data,sep="(?<!a)|(?!1)", engine='python') # 使用正则表达式

`import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
array2=np.array(list1)
df2=pd.DataFrame(array2,index=['第1次测试','第2次测试','第3次测试','第4次测试','第5次测试','第6次测试','第7次测试'],columns=['第一组','第二组','第三组','第四组','第五组'])
print(df2)
df2.plot.barh(stacked=True)
plt.xticks(rotation=360)
plt.show()

data1={'x':[1,2,3,4,5],'y':[2,4,6,8,10]}
df3=pd.DataFrame(data1)
df.plot(kind='scatter',x='x',y='y')
plt.show()

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams["font.family"] = "FangSong" # 设置字体
mpl.rcParams["axes.unicode_minus"] = False # 正常显示负号
data1 = pd.Series({'中专': 0.2515, '大专': 0.3724, '本科': 0.3336, '硕士': 0.0368, '其他': 0.0057})

将序列的名称设置为空字符,否则绘制的饼图左边会出现None这样的字眼

data1.name = ''

控制饼图为正圆

plt.axes(aspect='equal')

plot方法对序列进行绘图

data1.plot(kind='pie', # 选择图形类型
autopct='%.1f%%', # 饼图中添加数值标签
radius=1, # 设置饼图的半径
startangle=180, # 设置饼图的初始角度
counterclock=False, # 将饼图的顺序设置为顺时针方向
title='失信用户的受教育水平分布', # 为饼图添加标题
wedgeprops={'linewidth': 1.5, 'edgecolor': 'green'}, # 设置饼图内外边界的属性值
textprops={'fontsize': 10, 'color': 'black'}) # 设置文本标签的属性值
plt.show()
`

posted @ 2024-01-17 15:15  peculiar-  阅读(32)  评论(0)    收藏  举报