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)
1276



被折叠的 条评论
为什么被折叠?



