Python Pandas包学习小计

xiaoxiao2025-11-14  6

pandas一般用于读取.csv文件,有些类似于电子表格,使用Python进行数据处理时经常会用到,以前学过一次,总不用容易忘记,再次简单记录。

Pandas基础 #Pandas 基础 import pandas as pd import numpy as np np.random.seed(1) dates = pd.date_range('20181001',periods = 6) s = pd.Series([1,2,np.nan,0,8,9],index = dates) df = pd.DataFrame(np.random.randn(6,5),index = [2,3,1,0,9,6],columns = [i for i in 'acbed']) df1 = pd.DataFrame(np.random.randn(6,4)) dic = {'a':[1.,2],'b':[2,3],'c':[3,4],'d':[4,5]} df2 = pd.DataFrame(dic,index = ['a','b']) #字典里的key为列,values是每列的数据 print(df) df2.dtypes #查看dataframe的数据类型 df2.index #查看dataframe的行号 df2.columns #查看dataframe的列号 df2.values #查看dataframe的值(内容),即去掉行标签和列标签的纯数组形式,可转换成numpy进行后续操作。 df.describe() #描述dataframe的属性(一般针对于数字操作) df.sort_index(axis = 1,ascending=False) #排序,axis = 0 是对行进行排序,axis = 1 是对列进行排序,ascending = False 指的是逆序 df.sort_values(by = 'a',ascending = False ) #排序,针对'a'列的元素降序(从大到小)排序 #pandas选择数据 #打印某一列 da.a 或者 da['a'] df['b'] #打印前几行 df[:4] #select by label : loc df.loc[3] #index = 3 (不是第三行) ,即标签为3这行的数据 df.loc[:,['a','b']] #打印所有行的第‘a'、'b'列数据 #select by position :iloc df.iloc[3] #打印第3行(其实是第4行)位置的数据 df.iloc[2:4,1:3] df.iloc[[0,2,5],0:3] #若是df[[0,2,5],0:3]则不行,会报错,df[]只能显示行,eg:df[2],df[:3] #mixed df.ix[:2,['aa','bb']] #筛选功能 print(df[df['a']<3]) #最后的结果不仅仅是‘a’列,还包含‘bcd’列 print(df.a[df.a<3]) #如此表示结果仅仅含有‘a’列 #增加列 df['e'] = np.nan #增加一列e,值为np.nan df['f'] = pd.Series([1,2,3,4,5,6],index = pd.date_range('20180101',periods = 6)) #以Series形式增加一列‘f’ 使用Pandas处理缺失数据  #pandas处理缺失数据 dates = pd.date_range('20180101',periods = 6) df = pd.DataFrame(np.random.randn(24).reshape((6,4)),index = dates,columns = ['a','b','c','d']) np.random.seed(1) df.iloc[0,1] = np.nan df.iloc[1,2] = np.nan print(df) #丢弃含有nan的行列 #how:{'any','all'},how这个属性里面有两个值,‘any’和‘all’,any表示只要有nan则选择丢弃,‘all’表示该axis中全为nan时候才丢弃 df = df.dropna(axis = 0,how = 'any') df.isnull() #对应每一个值会显示为True 或者False np.any(df.isnull() == True) #对于比较大的dataFrame结构形式,可通过这种方式查看是否含有nan值 Pandas中数据的合并 import pandas as pd import numpy as np #合并数据 df1 = pd.DataFrame(np.ones((3,4))*0,columns = ['a','b','c','d']) df2 = pd.DataFrame(np.ones((3,4))*1,columns = ['a','b','c','d']) df3 = pd.DataFrame(np.ones((3,4))*2,columns = ['a','b','c','d']) #print(df1) #print(df2) #print(df3) #第一种合并方向 pd.concat([df1,df2,df3],axis = 0,ignore_index = True) #最后一个参数ignore_index为对行号进行操作,True表示从头重新排序,默认为False即保留各自本身的index #第二种合并方式 df4 = pd.DataFrame(np.ones((3,4))*1,columns = ['a','b','c','d'],index = [1,2,3]) df5 = pd.DataFrame(np.ones((3,4))*2,columns = ['b','c','d','e'],index = [2,3,4]) print(df4) print(df5) pd.concat([df4,df5],axis = 0,join = 'outer',ignore_index = True) #默认的就是outer(对于多出来的行列里面的数值为nan) pd.concat([df4,df5],axis = 0,join = 'inner',ignore_index = True) #则会进行裁剪,只保留两者的共同部分 #当pd.concat()中的axis = 1时候 pd.concat([df4,df5],axis = 1,join_axes = [df4.index])#这里的join_axes表示列号(index)按照df4的index #Pandas中的append(默认是接在下面) #将df4和df5结合 df4.append(df5,ignore_index = True) #在df4下面添加一行pd.Series s1 = pd.Series([1,2,3,4],index = ['a','b','c','d']) df4.append(s1,ignore_index = True) #此处需要加上ignore_index = True

Pandas中pd.get_dummies的使用可参考https://www.jianshu.com/p/c324f4101785,具体举例子如下:

import pandas as pd import numpy as np np.random.seed(1) dates = pd.date_range('20181001',periods = 6) s = pd.Series([1,2,np.nan,0,8,9],index = dates) df = pd.DataFrame(np.random.randn(6,5),index = [2,3,1,0,9,6],columns = [i for i in 'acbed']) df['e'] = [1,2,'vf','ve',5,np.nan] #增加一列‘e’ df = df.sort_index(axis = 1) #按列进行排序 print(df) #对df中的非数字类型特征值进行操作,将其利用0或1来代替,这样的结果是增加了列数,同时最后的dummy_na = True表示的是np.nan也作为一个特征值,用列表示出来,默认是dummy_na = False df = pd.get_dummies(df,dummy_na = True) print(df)

 

 

 

转载请注明原文地址: https://www.6miu.com/read-5039641.html

最新回复(0)