Series
import pandas as pd
from pandas import Series,DataFrame
# 因为pandas含有使得数据分析工作变得更快和更简单那的高级数据结构和操作工具
# pandas是基于Numpy来进行构建的,让以Numpy为中心的应用变得更加简单
## Series类型说明
# 这个就是一种类似于一维数组的对象,它是由一组阈值相关的数组标签组成(索引)
# 仅由一组数据即可产生最简单的Series
obj=Series([1,2,3,4,5])
print(obj)
print(obj.values)
print(obj.index)
##自定义索引
obj=Series(['a','b','c','d','e'],index=[1,2,3,4,5])
print(obj)
print(obj[1])
#Series也可以被当成字典来使用
#将一个字典类型的数据转换成Series类型的数据
data={'a':1000,'b':2000,'c':"3000"}
print(data)
obj=Series(data)#这个时候,Series中的索引就是字典中的健
print(obj)
#使用字典的部分数据构建Series
keys=['a','c']
obj_1=Series(data,index=keys)
print(obj_1)
#缺失数据的处理
data={'a':None,'b':2000,'c':3000}
obj=Series(data)
print("notnull==========================")
print(obj)
print(pd.notnull(obj))
print(pd.isnull(obj))
data={"LiLei":None,"HanMeimei":25,"Tony":None,"Jack":50}
obj=Series(data)
obj.name="Name_and_Age"
obj.index.name="xingming"
print(obj)
DataFrame
- DataFrame是一个表格行的数据结构,它有一组有序的列。
- 每列可以是不同值的类型、数值、字符串
- DataFrame本身由行索引,也有列索引
- DataFrame也可以理解成是由Series组成的字典
构建一个DataFrame
import pandas as pd
from pandas import Series,DataFrame
data={
'60年代':['狗子','嘎子','秀儿'],
'70年代':['卫国','建国','爱国'],
'80年代':['李雷','韩梅梅','张伟']
}
frame_data=DataFrame(data)
print(frame_data)
print(frame_data['70年代'])
pandas重新索引
排序
Series
import pandas
from pandas import Series,DataFrame
#排序
#根据条件对数据集进行排序
obj=Series(range(4),index=['d','e','a','b'])
print(obj)
print(obj.sort_index())
print(obj.sort_values())
DataFrame
import pandas
from pandas import DataFrame
import numpy as np
frame=DataFrame(np.arange(8).reshape((2,4)),index=['two','one'],columns=['c','d','a','b'])
print(frame)
#默认使用index进行排序,axis=0
print(frame.sort_index())
#指定轴进行排序
print(frame.sort_index(axis=1))
frame=DataFrame({'b':[4,7,2,-1],'a':[0,4,2,0]},index=['a','b','d','c'])
print(frame)
frame=DataFrame({'b':[4,7,2,-1],'a':[0,4,2,0]})
print(frame)
print(frame.sort_values(by='b'))
层次化索引
初始层次化索引
import pandas
from pandas import Series,DataFrame
import numpy as np
#层次化索引
# 层次化索引是pandas的一项比较重要的功能。它能够让你在一个轴上拥有多个索引级别,
# 另一种说法是它能以低纬度形式处理高纬度数据
data=Series(np.random.randn(10),index=[['a','a','a','b','b','b','c','c','d','d'],[1,2,3,4,5,6,7,8,1,2]])
print(data)
输出:
a 1 0.893465
2 -0.760556
3 -0.982304
b 4 -0.131939
5 -0.958735
6 -1.562588
c 7 -0.040378
8 0.129428
d 1 -0.019108
2 -0.913752
import pandas
from pandas import Series,DataFrame
import numpy as np
#选取子集操作
data=Series(np.random.randn(10),index=[['a','a','a','b','b','b','c','c','d','d'],[1,2,3,4,5,6,7,8,1,2]])
print(data)
# print(data['b'])
# print(data['b':'d'])
#内层索引
# print(data[:,2]) #第一层索引选择所有元素,第二层索引中选择索引为2的元素
# print(data.unstack().stack())
# 使用unstack生成一个新的dataframe
from pandas import DataFrame
import numpy as np
#对于DataFrame每条轴都可以有分层索引,各层也是都可以有名字的
frame_data=DataFrame(np.arange(12).reshape((4,3)),
index=[['a','a','b','b'],[1,2,1,2]],
columns=[['Black','Yellow','Bule'],['Green','Red','Green']])
print(frame_data)
frame_data.columns.names=['color1','color2']
print(frame_data)
frame_data.index.names=['k1','k2']
print(frame_data)
DataFrame类型层次化索引的基本操作
DataFrame层次化索引的访问
选择列:frame_data['Black']
from pandas import DataFrame
import numpy as np
#对于DataFrame每条轴都可以有分层索引,各层也是都可以有名字的
frame_data=DataFrame(np.arange(12).reshape((4,3)),
index=[['a','a','b','b'],[1,2,1,2]],
columns=[['Black','Yellow','Black'],['Green','Red','Bule']])
print(frame_data)
print(frame_data['Black'])
行和列同时筛选:frame_data.loc['a',['Black']]
from pandas import DataFrame
import numpy as np
#对于DataFrame每条轴都可以有分层索引,各层也是都可以有名字的
frame_data=DataFrame(np.arange(12).reshape((4,3)),
index=[['a','a','b','b'],[1,2,1,2]],
columns=[['Black','Yellow','Black'],['Green','Red','Bule']])
print(frame_data.loc['a',['Black']])
from pandas import DataFrame
import numpy as np
frame_data=DataFrame(np.arange(12).reshape((4,3)),
index=[['a','a','b','b'],[1,2,1,2]],
columns=[['Black','Yellow','Black'],['Green','Red','Bule']])
frame_data.index.names=['k1','k2']
frame_data.columns.names=['color1','color2']
print(frame_data)
print(frame_data.sum(level='k2'))
print(frame_data.sum(level='color2',axis=1))
pandas读取csv文件
pandas文本格式数据处理
read_csv:从文件、url、文件型对象中加载带分隔符的数据,默认分隔符为逗号
read_table:从文件、url、文件型对象中加载带分隔符的数据,默认分割符号为制表符\t
read_fwf:读取固定宽列格式数据
read_clipboard:读取剪切板中的数据,可以看作是read_table的剪切板,可以用在将网页中的数据转换为表格中数据时用到
import pandas as pd
r=pd.read_csv('data/test/data.csv')
print(r)
输出:
a b c d e
0 1 2 3 4 5
1 6 7 8 9 10
默认将第一行数据当成是表头
阻止第一行数据被当成表头的方法
import pandas as pd
r=pd.read_csv('data/test/data.csv',header=None)
print(r)
指定分隔符
import pandas as pd
r=pd.read_table('data/test/data.csv',sep=',') #指定分隔符
print(r)
指定某列为索引
import pandas as pd
r1=pd.read_csv('data/test/data.csv')
r2=pd.read_csv('data/test/data.csv',index_col='c')
print(r1)
print(r2)
输出:
a b c d e
0 1 2 3 4 5
1 6 7 8 9 10
a b d e
c
3 1 2 4 5
8 6 7 9 10
指定多列为层次化索引
import pandas as pd
r1=pd.read_csv('data/test/data.csv')
r2=pd.read_csv('data/test/data.csv',index_col='c')
r3=pd.read_csv('data/test/data.csv',index_col=['c','d'])
print(r1)
print("========================")
print(r2)
print("========================")
print(r3)
输出:
a b c d e
0 1 2 3 4 5
1 6 7 8 9 10
========================
a b d e
c
3 1 2 4 5
8 6 7 9 10
========================
a b e
c d
3 4 1 2 5
8 9 6 7 10
import pandas as pd
r1=pd.read_csv('data/test/data2.csv')
print(r1)
#文件中的NA表示空
a b c d message data
0 1 2 3 4 5 NaN
1 hello 6 7 8 9 world
2 NaN hi 10 11 12 14
不读取某一行
import pandas as pd
r1=pd.read_csv('data/test/data2.csv',skiprows=[1])#不读取第一行
r2=pd.read_csv('data/test/data2.csv')
print(r1)
print(r2)
a b c d message data
0 hello 6 7 8 9 world
1 NaN hi 10 11 12 14
a b c d message data
0 1 2 3 4 5 NaN
1 hello 6 7 8 9 world
2 NaN hi 10 11 12 14
判断是否为空
import pandas as pd
rs=pd.read_csv('data/test/data2.csv')
print(pd.isnull(rs))
输出:
a b c d message data
0 False False False False False True
1 False False False False False False
2 True False False False False False
大文件指定读取前几行
import pandas as pd
rs=pd.read_csv('data/test/data2.csv',nrows=2)
print(rs)
读取一个csv文件写入另一个文件
import pandas as pd
rs=pd.read_csv('data/test/data2.csv',nrows=2)
print(rs)
print("============================")
rs.to_csv('data3.csv',sep="|")
读取excel数据
data.xlsx
文件的数据内容如下:
id age place
1 11 21
2 12 22
3 13 23
4 14 24
5 15 25
6 16 26
7 17 27
8 18 28
9 19 29
10 20 30
读取data.xlsx文件并绘制图像,并保存成1.jpg格式
import pandas as pd
data=pd.read_excel('data/test/data.xlsx')
p1=data.plot(kind='scatter',x='age',y='place').get_figure()
p1.savefig('1.jpg')
import pandas as pd
import numpy as np
dates=pd.date_range('20200101',periods=100)
print(dates)
df=pd.DataFrame(np.random.randn(100,4),index=dates,columns=list('ABCD'))
print(df)
p1=df.plot(kind='scatter',x='A',y='B').get_figure()
p1.savefig('1.jpg')