pandas可以指定每行每列的名字
基础:
创建一个Pandans的序列:
result= pd.Series([1,2,3,4])
创建一个时间的序列
dates = pd.date_range("20160304",periods=6)
创建一个二维数据() 相当于二维的numpy)
pd.DataFrame(np.random.randn(6,4),index=dates(已经定义好的变量),columns=['a','b','c','d'])
使用字典来创建二维数据:
A,B,C
pd.DateFrame({'A':1,'B':'fpp','C':'pd'})
result.dtypes 每列的类型
result.index 每列的序号
result.columns 每列的列名
result.values 所有值
result.describe() 描述 ,只能运算数字的一些操作
result.T 矩阵转至
result.sort_index(axis=1,ascending=False) 以列名来倒叙排序
1:列名排序 0:行排序
False:倒叙,True:正序
result.sort_values(by='E') :排序当行的值
选择数据:
result['A']/result.A --->获取A列的值
result[2:3] --->切片选择
pd.loc['行名',['列名','']]
pd.iloc[3] 第三行的数据
pd.iloc[3,1] 第三第一列
pd.ix[行,列] -结合iloc和loc
pd[pd.A>8] ----->A列大于8的所有信息
设置值:
通过选择数据后然后进行赋值
处理丢失数据:
df.dropna(axis=0,how="any") #how={'any',"all"} any:只要有none就丢掉,all:全为none才丢掉
df.fillna(value=0):填充none位置处的值
df.isnull():返回False,True列表 来查看是否缺失值
np.any(df.isnull()==True) -----检查是否至少有一个等于true
读取数据:
data = pd.read_csv("文件名") ----读取csv的文件
data.to_csv("文件名")
合并1concat --->合并DataFrame
列名一样合并:
1.res = pd.concat([df1,df2,df3],axis=0,ignore_index=True) ignore_index:忽略行名,axis=0是预设值,因此未设定任何参数时,函数默认axis=0。0:纵向,1:横向
2.#join,['inner','outer'] 默认是"outer"依照column来做"纵向"合并,如果没有就用None填充,inner,只会合并相同的列,
res = pd.concat([df1,df2,df3],axis=0,join="outer",ignore_index=True) ignore_index:忽略行名
3. join_axes (依照 axes 合并)->依据哪一个的索引来左右合并
pd.concat([df1,df2],axis=1,join_axes=[df1.index],ignore_index=True) 依据df1的行名来左右合并
df1.append([数据1,数据2],ignore_index=True) -->也可以指定行还是列添加
s1 = pd.Series([1,2,3,4],index=['a','b','c','d'])
df1.append([s1],ignore_index=True) ->只在最后一行添加一行
合并2merge:
关于列名合并,但主要是用于两组有key column的数据,统一索引的数据. 通常也被用在Database的处理当中.
pd.merge(date1,date2,on=["列名"]) ----》on依据哪一个列名合并,默认是how=inner-->只考虑相同的key
how=[inner,outer,left,right] ->left 以左边的dataframe的列名为主
res = pd.merge(left,right,on="key") #on="" 依据那一列名合并
# 合并时有4种方法how = ['left', 'right', 'outer', 'inner'],预设值how='inner':找相同的合并
res = pd.merge(left,right,on=["key1","key2"],how="outer") #全部合并,没有值用none补充
res = pd.merge(left,right,on=["key1","key2"],how="left") #以第一个数据(left)的on为主
res = pd.merge(left,right,on=["key1","key2"],how="right",indicator="result") #以第二个数据(right)的on为主,indicator="result"将合并的记录是否有值放在新的一列。
res=pd.merge(left,right,left_index=True,right_index=True,how="outer") #left_index=True,right_index=True另个必须同时写,依据两个的行索引来合并
#使用suffixes解决overlapping的问题
res = pd.merge(boys, girls, on='k', suffixes=['_boy', '_girl'], how='outer') #suffixes 解决列名或者行名一样的问题,给两个一样的列名起个别名
plot:汇图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#Series
data = pd.Series(np.random.randn(1000),index=np.arange(1000))
data = data.cumsum() #每个数相加与前一个
data.plot() #数据绘图
plt.show() #plt显示图
#DataFrame
data = pd.DataFrame(np.random.randn(1000,4),index=np.arange(1000),columns=['A','B','C','D'])
data = data.cumsum()
#data.plot()
# plt.show()
#plot method
#vbar,hist,box,kde,area,scatter,hexbin..... #图的一些展示方式
ax = data.plot.scatter(x='A',y='B',color="DarkBlue",label="Class1")
#data.plot.scatter(x='D',y='C',color="darkGreen",label="Class2",ax=ax) #在一张图上画上多个class
plt.show()