pandas学习笔记

创建

pd.read_csv(r'e:\tmp\test2.csv') cvs转DataFrame  read_table() 默认使用\t作为分隔

pd.read_excel('path') excel转DataFrame

mydict = dict(zip(mylist, myarr)) list转dict

ser = pd.Series(mydict) dict转series

df = ser.to_frame() series转换为dataframe 一般不会这么做,一般Series作表表格中的一行

df = pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False) 创建一个DataFrame

df = DataFrame(np.arange(20).reshape(4,5),index=['one','two','three','four'],columns=list('abcde')) ndarray转DataFrame

df=pd.DataFrame(np.random.random([20,5]))

pd.DataFrame(category.str[:3]) 提取前三个字符,并生成数据表

pd.DataFrame((x.split(‘-‘) for x in ds[‘category’]),index=ds.index,columns=[‘category’,’size’])) 对category字段的值依次进行分列,并创建数据表,索引值为ds的索引列,列名称为category和size

 

user1_df = pd.DataFrame([]) 创建空表

-----------------------------------------------------------------

获取信息

df.info()打印DataFrame对象的信息 维度、列名称、数据格式、所占空间等

df.describe() 查看数据按列的统计信息  ds.describe().round(2).T #round函数设置显示小数位,T表示转置

df.index df.columns df.axes 行索引 列索引 行及列索引

df.shape 维度查看

df.dtypes 每一列数据的格式 df[‘B’].dtype 某一列格式

df.values 返回ndarray类型的对象

df.isnull() 查看某一列空值 ?

df[‘B’].unique()  查看某一列的唯一值

ds[‘city’].isin([‘beijing’]) 判断city列的值是否为北京???

-----------------------------------------------------------------

特殊处理

df.fillna(value=0) 用数字0填充空值

ds.dropna() 丢弃缺损值

df.T index 与 columns 对调

df.loc[:,['B', 'A']] = df[['A', 'B']].values 交换AB两列

df1=df[:] 创建一个新表,但其实数据仍使用同一份,df1增加的列对df不生效

-----------------------------------------------------------------

排序

ds.sort_values(by=[‘age’]) 按照特定列的值排序

ds.sort_index() 按照索引列排序

df.sort_values(['trading_date', 'code'], inplace=True) 

DataFrame.sort_values(by=‘##’,axis=0,ascending=True, inplace=False, na_position=‘last’)数据排序

-----------------------------------------------------------------

截取表的一部分--按行筛选(按行号筛选,按索引筛选,按列信息筛选)

df.head(i) 显示前 i 行数据 df.head() #默认前10行数据

df.tail(i) 显示后 i 行数据 df.tail() #默认后10 行数据

df[0] df.loc[0] 第0行,返回序列Series df[:2]#第2行之前的数据 df[0:1]#第0行  df[-1:-3:-1]#倒数第1,2行

df.iloc[0:5] 0到4行

 

gender_df.query("gender == ['M']") 取性别为男性的行

ds.query(‘city == [“beijing”, “shanghai”]’)  使用query函数进行筛选

ds.query(‘city == [“beijing”, “shanghai”]’).price.sum() 对筛选后的结果按prince进行求和

df.loc[0:3,'a':'c'] 选取多行多列 注意0:3实际上并不是数字,而是行的label df.loc[:,'a':'c']选取多列

df.loc[df.loc[:,'a']>1] 选取a列中值大于1的行 

df_cured=df[df['Result_of_Treatment']==1]

ds.loc[ds[‘city’].isin([‘beijing’,’shanghai’])]  判断city列里是否包含beijing和shanghai,然后将符合条件的数据提取出来

ds.loc[(ds[‘age’] > 25) & (ds[‘city’] == ‘beijing’), [‘id’,’city’,’age’,’category’,’gender’]] 使用“与”进行筛选

ds.loc[(ds[‘age’] > 25) | (ds[‘city’] == ‘beijing’), [‘id’,’city’,’age’,’category’,’gender’]].sort([‘age’])  使用“或”进行筛选

ds.loc[(ds[‘city’] != ‘beijing’), [‘id’,’city’,’age’,’category’,’gender’]].sort([‘id’]) 使用“非”条件进行筛选

ds.loc[(ds[‘city’] != ‘beijing’), [‘id’,’city’,’age’,’category’,’gender’]].sort([‘id’]).city.count() 对筛选后的数据按city列进行计数

ds.ix[:’2013-01-03’,:4] #ix已弃用

iloc索引的开闭区间机制和Python传统的不同,而是与MATLAB类似的双侧闭区间,即只要出现,就会包含该标签

 

截取表的一部分--按列

df['name'] df[['name','gender']] #选取多列,多列名字要放在list里

df.iloc[1:2, 0:2] 选取多行多列

-----------------------------------------------------------------

修改索引

ds.set_index(‘id’) 设置索引列

ds.reset_index()  df.reset_index(inplace=True) 重设索引

per_type.index=per_type.index.map(lambda x: '{}型'.format(int(x)))

-----------------------------------------------------------------

增加列或修改列 根据已有数据创建列或修改原有列

df['id']=df2['id']

df[‘prince’].fillna(df[‘prince’].mean()) 使用列prince的均值对NA进行填充

df[‘city’]=df[‘city’].map(str.strip) 清除city字段的字符空格

df[‘city’]=df[‘city’].str.lower() 大小写转换

df[‘price’].astype(‘int’)更改数据格式

df.rename(columns={‘category’: ‘category-size’}) 更改列名称

df[‘city’].drop_duplicates() 删除后出现的重复值 

df[‘city’].drop_duplicates(keep=’last’) 删除先出现的重复值

df[‘city’].replace(‘sh’, ‘shanghai’)  数据替换

ds[‘group’] = np.where(ds[‘price’] > 3000,’high’,’low’) 如果prince列的值>3000,group列显示high,否则显示low

ds.loc[(ds[‘city’] == ‘beijing’) & (ds[‘price’] >= 4000), ‘sign’]=1 对复合多个条件的数据进行分组标记

df1['month']=df1['date'].map(lambda x: x[:x.rindex('/')]) 通过日期获取月份

df['age_period']=pd.cut(df['age'],[1,20,35,100],labels=['1~20岁','20~35岁','35~100岁']) 对数据分段

 

def add_one(x): return x + 1 df.applymap(add_one) 对DataFrame里的每个值进行处理,然后返回一个新的DataFrame

per_type.apply(lambda x: format(x, '.2%')) 修改series

-----------------------------------------------------------------

数据聚合

np.mean(male_df)[0] 对各列计算均值

ds.groupby(‘city’).count()  对所有的列进行计数汇总

ds.groupby('name').sum() name字段转为索引,其它字符类字段被移除

ds.groupby(‘city’)[‘id’].count() 按城市对id字段进行计数

ds.groupby([‘city’,’size’])[‘id’].count()  对两个字段进行汇总计数

ds.groupby(‘city’)[‘price’].agg([len,np.sum, np.mean])  对city字段进行汇总,并分别计算prince的合计和均值

df['age_period'].value_counts() 统计列元素出现的次数

df2 = pd.pivot_table(df1,index=['gender', 'user_id'],values='rating') 默认取均值

-----------------------------------------------------------------

两个序列计算

per_type=df_cured['Type'].value_counts()/df['Type'].value_counts()

-----------------------------------------------------------------

移除数据行

df1.drop('month',axis=1).diff() 

-----------------------------------------------------------------

两个表纵向合并

result = df1.append(df2)

concat

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,

          keys=None, levels=None, names=None, verify_integrity=False,

          copy=True)

-----------------------------------------------------------------

两个表横向合并

ds=pd.merge(df,df1,how='inner') 默认取表的交集

ds=pd.merge(ds,split,right_index=True, left_index=True) 将完成分裂后的数据表和原ds数据表进行匹配

df_left=pd.merge(df,df1,how='left')        

df_right=pd.merge(df,df1,how='right')

df_outer=pd.merge(df,df1,how='outer')  #并集

result = left.join(right, on='key')

-----------------------------------------------------------------

数据输出到文件

ds.to_excel(‘excel_to_python.xlsx’, sheet_name=’bluewhale_cc’)  写入Excel

ds.to_csv(‘excel_to_python.csv’ 写入到CSV

 

size_data.to_hdf('filename.h5', key='data') 保存成hdfs格式

size_data = pd.read_hdf('filename.h5', key='data')

-----------------------------------------------------------------

其它

ds.sample(n=3) 简单的数据采样

weights = [0, 0, 0, 0, 0.5, 0.5] ds.sample(n=2, weights=weights)手动设置采样权重

ds.sample(n=6, replace=False) 采样后不放回 ds.sample(n=6, replace=True) 采样后放回

ds[‘price’].std() 计算列的标准差 注意算法和numpy有差别

ds[‘price’].cov(ds[‘m-point’]) 计算两个字段间的协方差 

ds.cov() 数据表中所有字段间的协方差

ds[‘price’].corr(ds[‘m-point’])   两个字段的相关性分析相关系数在-1到1之间,接近1为正相关,接近-1为负相关,0为不相关

ds.corr() 数据表的相关性分析

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值