语句定义格式
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()
`