timotong

更加详细的内容可以查看:https://blog.csdn.net/hhtnan/article/details/80080240 (基本函数整理)

一.  DataFrame的创建

  创建一个空的dataframe 

df=pd.DataFrame(columns={"a":"","b":"","c":""},index=[0])

  out:

     a    c    b
0  NaN  NaN  NaN

 用list的数据创建dataframe:

a = [[\'2\', \'1.2\', \'4.2\'], [\'0\', \'10\', \'0.3\'], [\'1\', \'5\', \'0\']]
df = pd.DataFrame(a, columns=[\'one\', \'two\', \'three\'])
print df

  out:

  one  two three
0   2  1.2   4.2
1   0   10   0.3
2   1    5     0

   用numpy的矩阵创建dataframe

array = np.random.rand(5,3)
df = pd.DataFrame(array,columns=[\'first\',\'second\',\'third\'])

  用dict的数据创建DataFrame

data = { \'row1\' : [1,2,3,4], \'row2\' : [\'a\' , \'b\' , \'c\' , \'d\'] }
df = pd.DataFrame(data)

 

dict = { \'row1\' : [1,2,3,4], \'row2\' : [\'a\' , \'b\' , \'c\' , \'d\'] }
df = pd.DataFrame.from_dict(dict,orient=\'index\').T

   

  读取csv或者excel文件为DataFrame格式

df=pd.read_csv(\'D:/Program Files/example.csv\')

  excel一个表格中可能有多个sheet,sheetname可以进行选取

df = df.read_excel(\'D:/Program Files/example.xls\',sheetname=0)

  


 

二. DataFrame的一些描述和类型

   describe会显示dataframe的一些基本统计数据,数量、均值、中位数、标准差等

   head会显示dataframe的前几行,后几行:

print df.describe()
print df.head()
print df.tail(10)

  单独计算某列的统计值

df[\'one\'].sum()
df[\'one\'].mean()
df[\'one\'].count()
df[\'one\'].max()
df[\'one\'].min()

  查看dataframe的数据类型:

print (df.dtypes)

  查看dataframe的数据数目:

print (df.size)

  查看dataframe的形状:

print (df.shape)

  返回列数:

print (df.ndim)

  查看横纵坐标的标签名:

print (df.axes)

  


 

三. DataFrame的切片

  iloc索引或切片(iloc中只能取整数值):

print df.iloc[1,:] #第1行,所有列
print df.iloc[:,[0,2]] #第0行,第0列和第2列
print df[\'one\'].iloc[2] #列名索引+行号

  loc索引或切片(loc中可以取str):

print data.loc[0:1, [\'one\', three\']] #

  筛选出dataframe中有某一个或某几个字符串的列:

list=[\'key1\',\'key2\']
df = df[df[\'one\'].isin(list)]

  筛选出dataframe中不含某一个或某几个字符串的列,相当于反选

df = df[~df[\'one\'].isin(list)]

  


 

四. 缺失值的处理

  缺失值可以删除也可以用均值或者0等数填充:

df.fillna(df1.mean())
df.fillna(0)

 删除缺失值时可以指定列:

df = df.dropna(subset=[\'one\',\'two\'])

  


 

五. 去重、删除行或列

  去重需要在subset指定哪一列的值进行筛选,如果不选择的话默认整行的值全部一样才去掉

  first表示保留第一个出现的值所在行,last表示保留最后一个出现的重复值所在的行,false表示重复的行全部删除

df=df.drop_duplicates(subset=\'one\',keep=\'first\')

  去除有NaN值的行或列(axis=0去除行,=1去除列):

df = df.dropna(axis=0)
df = df.dropna(axis=1)

  去除某一列:

df = df.drop([\'one\'],axis=1)

  去除含有某一个数的行:

row_list = df[df.one == 2].index.tolist() # 获得含有该值的行的行号
df = df.drop(row_list)

  


 

 六. DataFrame的修改

  修改数据类型

df[\'one\']=pd.DataFrame(df[\'one\'],dtype=np.float)

  修改列名(需要写上所有列名,包括需要修改的和不需要修改的):

df.columns = [\'first\',\'second\',\'all\']

  修改列名(只需写上需要修改的列)

df.rename(columns = {\'one\':\'first\',\'two\':\'second\'},inplace = True) #inplace=True表示修改df,若为False表示只返回一个修改后的数据

  重排序(by可以取多个列名,默认升序):

df = df.sort_values(by=[\'one\'],ascending = True)
df = df.sort_index(axis = 0,ascending = True,by = \'one\')
df = df.sort(columns = [\'one\'],axis = 0,ascending = True)

  修改数据

df.iloc[1,2] = 10

  用已有的列进行运算创建新的列

df[\'new_colume\'] = df[\'one\'] + df[\'two\']

  


 

七. dataframe更改索引

  当删除掉不需要的行时,行索引会变的不连续,这时候可以重新设计新的索引

df[\'index\']=range(len(df[\'one\']))
df.set_index(\'index\')

  设置时间序列为索引

dd = pd.date_range(start=\'4/1/2018\',periods=5)
#dd = pd.date_range(\'4/1/2018\',\'4/5/2018\')
df = df.set_index(dd)

  


 

 八. 添加新的行,将两个dataframe连接到一起

  axis表示连接的方向,axis=0表示两个dataframe的行数会增加,如果列名相同则直接共用列,如果列名不同会生成新的列;axis=1,表示会加上新的列

df=pd.concat([df,df],axis=0) # 连接后行数是以前的2倍,列数不变

   在dataframe添加新的行

df = df.append(df.loc[2,:],,ignore_index=True) 

  如果两个dataframe的列名是一样的,也可以用merge:

df = pd.merge(df,df)

  


 

九. DataFrame的输出

  输出为excel或者csv格式,csv文件里的数据被读取时数据类型默认为object,excel则会保留原有的数据类型

df.to_excel(\'path/filename.xls\')
df.to_csv(\'path/filename.csv\')

  输出为numpy的矩阵格式

matrix = df.ax_matrix()

  输出为dict格式

dict = df.to_dict(orient="dict")

  


 

分类:

技术点:

相关文章: