简介:pandas是一个非常重要的用于数据分析和处理的python包,并且它也是开源的它不仅提供了很多方法,使得数据处理非常简单,同时在数据处理速度上也做了很多优化,使得和python内置方法相比时有了很大的优势。
Pandas的安装(Ubuntu)
sudo pip3 install pandas
安装好之后进入终端
安装好之后进入终端
导入包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
创建一个Series(序列,索引值默认从0开始)
s = pd.Series([1,3,5,np.nan,6,8])
s
Out[5]:
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
s = pd.Series([1,3,5,np.nan,6,8])
s
Out[5]:
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
dates = pd.date_range('20160130', periods=6) (生成一个起始为'20160130'的时间序列s)
dates
dates2=pd.date_range('20160130','20180322')
dates2
创建一个dataframe对象
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
df
Out[9]:
A B C D
2013-01-01 0.469112 -0.282863 -1.509059 -1.135632
2013-01-02 1.212112 -0.173215 0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929 1.071804
2013-01-04 0.721555 -0.706771 -1.039575 0.271860
2013-01-05 -0.424972 0.567020 0.276232 -1.087401
2013-01-06 -0.673690 0.113648 -1.478427 0.524988
np.random.randn(6,4)是指从标准正态分布中返回一个或多个样本值6行,4列
查看数据的方法:
df.head(2) 显示前两列,如果不带参数会显示全部
df.tail(2) 显示后两列
df.index 查看该对象的索引
df.columns 查看行
df.values 查看值
df.describe() 对每一列数据进行统计,包括计数,均值,std
df.T 对其进行转置
df.sort_index(axis=1,ascending=False) 对所有的行进行排序,降序,参数缺省时默认升序
df.+<tab> 自己去查看其它方法,我就不一一列举了
df.head(2) 显示前两列,如果不带参数会显示全部
df.tail(2) 显示后两列
df.index 查看该对象的索引
df.columns 查看行
df.values 查看值
df.describe() 对每一列数据进行统计,包括计数,均值,std
df.T 对其进行转置
df.sort_index(axis=1,ascending=False) 对所有的行进行排序,降序,参数缺省时默认升序
df.+<tab> 自己去查看其它方法,我就不一一列举了
以字典的方式创建一个dataframe的对象
df2 = pd.DataFrame({ 'A' : 1.,
'B' : pd.Timestamp('20130102'),
'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
'D' : np.array([3] * 4,dtype='int32'),
'E' : pd.Categorical(["test","train","test","train"]),
'F' : 'foo' })
'B' : pd.Timestamp('20130102'),
'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
'D' : np.array([3] * 4,dtype='int32'),
'E' : pd.Categorical(["test","train","test","train"]),
'F' : 'foo' })
df2
Out[11]:
A B C D E F
0 1.0 2013-01-02 1.0 3 test foo
1 1.0 2013-01-02 1.0 3 train foo
2 1.0 2013-01-02 1.0 3 test foo
3 1.0 2013-01-02 1.0 3 train foo
df2.dtypes 查看结构
操作对象的一些方法:
df['A'] 查看A列的值
df[0:3] 查看前三行的数
df['20130101':'20130103'] 同上
loc是通过标签来选择数据
df.loc['20130102',['A','B']] 选择特定行的特定列
df.loc[:,['A','B']] 选择特定行的所有列
df.loc['20130102',['A','B']] 选择特定行的特定列
df.loc[:,['A','B']] 选择特定行的所有列
iloc通过位置来选择数据,用法同loc类似
df.iloc[3:5,0:2] 切片选择行标3到5之间的列标0到2之间的数据
df.iloc[3:5,0:2] 切片选择行标3到5之间的列标0到2之间的数据
另外还可以通过条件来选择数据
如:df[df >0] 选择数据对象中所有大于0的数据
如:df[df >0] 选择数据对象中所有大于0的数据
copy()方法 拷贝数据
df2=df.copy() 拷贝df的所有内容到df2
df2['E']=['one','two','three','four','five','six'] 为df2增加一列E
isin(x)方法 判断x是否在数据集中
df2[df2['E'].isin(['one'])
df2[df2['E'].isin(['one'])
缺失值处理的几种方法
df.reindex() 用来对指定轴上的索引进行改变/增加/删除操作
df.fillna(value=x) 用值为x的数对缺失值进行填充
df.dropna(how='any') 去掉所有包含缺失值的行
df.reindex() 用来对指定轴上的索引进行改变/增加/删除操作
df.fillna(value=x) 用值为x的数对缺失值进行填充
df.dropna(how='any') 去掉所有包含缺失值的行
df3=df.reindex(index=dates[0:4],columns=list(df.columns)+['E']) 复制df里的数据到df3中
df3.loc[dates[0]:dates[1],'E']=1 将指定行的值指定列值给1,每给值的是就是缺失的
df3
pd.isna(df3) 通过bool值来查找哪些值缺失
df.fillna(value=x) 用值为x的数对缺失值进行填充
df.dropna(how='any') 去掉所有包含缺失值的行
以上自己练习操作,不再示例
合并的几个方法
a.contact
df4=pd.DataFrame(np.random.randn(10,4)) 创建一个10行4列的随机数据集
pieces=[df4[:3],df4[3:7],df4[7:]] 将该数据集切成3片
pd.concat(pieces) 将切片粘合起来
a.contact
df4=pd.DataFrame(np.random.randn(10,4)) 创建一个10行4列的随机数据集
pieces=[df4[:3],df4[3:7],df4[7:]] 将该数据集切成3片
pd.concat(pieces) 将切片粘合起来
b.append
s=df.iloc[3] 将df中的第四行复制到s序列,从0开始计数
df.append(s,ignore_index=True) 将该列添加到df的尾行,也可以指定
s=df.iloc[3] 将df中的第四行复制到s序列,从0开始计数
df.append(s,ignore_index=True) 将该列添加到df的尾行,也可以指定
c.merge
left=pd.DataFrame({'key':['foo','foo'],'val':[10,30]})
right=pd.DataFrame({'key':['foo','foo'],'val':[8,7]})
pd.merge(left,right,on='key') 将上面两个粘合起来
对数据分组的方法
df5=pd.DataFrame({'A':['foo','bar','foo','bar'],
'B':['one','two','one','two'],
'C':np.random.randn(4),
'D':np.random.randn(4)})
df5.groppby('A').sum()
其他方法:
df.mean() 默认对每一列求均值
df.mean(1) 对每一行求均值
分组(groupby)
df.mean() 默认对每一列求均值
df.mean(1) 对每一行求均值
分组(groupby)
df.['x'].values_counts() 统计某x列中各个值的出现次数
df.apply(lambda X:X.max()-X.min()) 返回指定列中最大与最小的差值
df.apply(lambda X:X.max()-X.min()) 返回指定列中最大与最小的差值
时间序列(Series)
生成一个时间序列并画图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
a=pd.Series(np.random.randn(1000),index=pd.date_range('20160130',periods=1000))
b=a.cumsum()
b.plot()
plt.show()
导入和导出文件
a.to_csv('time.csv') 存为csv
a=pd.read_csv('time.csv') 读取