如何操作pandas?
用一个实际的数据集练手可能是最快最好的方法。
今天就和大家一起探索pandas关于数据操作和处理的基础方法。
使用数据API获取数据,参考:BigQuant数据API详解
stock = D.instruments()[:20] #选取股票列表中前20只股票
df = D.history_data(stock,
'2017-08-01',
'2017-08-05',
['company_name','company_type','volume',
'fs_net_profit','fs_roe']) #获取相关股票数据
# 分别为公司名称,公司类型,成交量,净利润,净资产收益率
df.head() # 只查看前5行
df.head(3) # 取前3行数据查看
df.tail(3) # 取最后3行数据查看
df.sample(5) # 随机抽取5条数据查看
df.shape #查看数据行列大小
df.columns #查看数据的列名
df.describe() #查看数据的统计值
df.info() #查看导入数据类型
df.iloc[22] #利用iloc命令做行选取
df.loc[22:25] #利用loc命令做行选取
df.loc[[22,33,44]] #利用loc命令做指定行选取
df['company_name'] #查看'company_name'列数据
df[['instrument', 'company_name', 'fs_roe']] #获取多列数据
df.loc[:10, ['company_name', 'fs_roe']] #获取指定行列数据
df.iloc[:5,3:] #获取指定行列数据
接下来采用以上所学,我们进行练习:
import numpy as np
df['open_int'] = np.nan #在数据表中新增一列"open_int",赋值为NaN(缺失值)
df.head() #查看数据集
df['open_int'] = 999 #赋值999
df.head()
df['test'] = df.company_type == '民营企业' #判断
df.head(5)
df.loc[df.company_type == '民营企业', 'test'] = '他是民营企业,税负真的不轻' #判断并赋值
df.loc[df.company_type != '民营企业', 'test'] = '不是民营企业,具体是啥还不知道' #判断并赋值
df.head()
df.loc[2:4, 'test'] = '我不听我不听' #选取特定行列,并赋值
df.head()
df.rename(columns={'test':'乱加的一列'}, inplace=True) #更改列名,并固化该操作
df.head()
df_test = df[:6] #取局部数据作练习
df_test.columns = ['列%s' % str(i) for i in range(1,len(df_test.columns)+1)] #更改所有的列名
df_test
df_test.reindex(columns= ['列1','列2','列4','列12','列3','列5','列6','列8','列7','列9']) #重排列名
df_test
df_test.reindex(index= [3,4,5,0,1,2]) #重排index
df_test.drop([2,5],axis=0) #删除行
df_test.drop(['列1','列2'], axis=1) #删除列
df['date'].sample(5) #查看数据
print(type(df.date[0]))
df.date = df.date.map(lambda x: x.strftime('%Y-%m-%d')) #将时间数据转换为字符串。
print(type(df.date[0]))
df[df['fs_roe']>1].head() #选择fs_roe>10的数据,囿于篇幅,展示前几行
df[(df['fs_roe']>1) & (df['fs_roe']<4)].head() #选择fs_roe在某区间的数据
df[(df['fs_roe']>1) & (df['company_type'] != '地方国有企业')].head() #选择满足多种条件的信息
df.sort_values(by='fs_roe').head() #按某条件排序,默认升序排列
df.sort_values(by='fs_roe',ascending= False).head() #ascendig= False,按降序排列
df.sort_values(by= ['fs_roe','fs_net_profit'],ascending= False).head() #多重指标排序
以数据的'fs_roe'列为例,进行数据描述和统计
df['fs_roe'].mean() #计算平均数
df['fs_roe'].idxmax() #返回最大值index
df.loc[df['fs_roe'].idxmin()] #定位到fs_roe最小的一列
df.fs_net_profit.corr(df.volume) #求解相关系数
df.company_type.unique() #查看不重复的数据
df.company_type.value_counts() #查看数据出现次数
df_test = df.sample(5)
df_test.loc[df_test['fs_roe']<=1,'fs_roe'] = np.nan #条件赋值NaN
df_test.loc[66] = np.nan #行赋值NaN
df_test #练习数据集构造完成
df_test.dropna() #删去包含NaN值的行
df_test.dropna(how= 'all',inplace= True) #删除全部为NaN的行,并使用'inplace=True'命令固化该删除操作。
df_test
df_test.dropna(axis= 1) #删除含有NaN值的列
在处理数据时,最好的方式不是删除数据,而是恰当地填充数据。 下面构造新的数据集,做示例操作。
df_test.loc[23] = np.nan
df_test.loc[[16,5],'volume'] = np.nan #构造练习数据集
df_test
df_test.fillna(0) #填充所有缺失数据为0
df_test.fillna({'date':'1988-09-01','volume':'20000000'}) # 对不同列的缺失数据填充不同的值
df_test.volume.fillna(df_test.volume.mean()) #采用平均值填充
df_test.volume.fillna(method= 'ffill') #向前填充('ffill')或者向后填充('bfill')
df_test.volume.fillna(method= 'ffill',limit= 1) #限制向前或者向后填充行数
将清理后的数据保存在平台上:
df.to_csv('df_Pandaslearning') #保存数据
至此,Pandas中基础用法以基本介绍完毕,欢迎参照示例多多练习、运用。