pandas用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/djshichaoren/article/details/80820698
pandas
关键:一定要少用loc,千万不要在遍历中使用loc,而应该用groupby、merge、apply操作代替
修改表:
1. 删除列名
today_user_act.drop('user_id', axis=1, inplace=True) # axis=1 指的是删除列,inplace=True指的是修改today_user_act实例
注意:如果在被调用函数的内部使用inplace=True,则函数外部的today_user_act也被改变,
而如果使用 today_user_act = today_user_act.drop('user_id', axis=1),则函数外部的today_user_act不会被改变
2. 重命名列名
a.rename(columns= {'hello':'hi'}, inplace=True) # inplace为True,则a的实例被修改


表操作:
create
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))


pd.Series([1,3,5,np.nan,6,8])


add
# 添加行:对应于数据库中的添加
s = df.iloc[3]
df.append(s, ignore_index=True)


# 将多行连接到一起
pd.concat([a,b,c])


# 添加空列
df.reindex(columns=list('ABCDE'), fill_value=0) # fill_value是填充nan的值


# 添加现成的列
(1)添加到末尾
a['Z'] = DataFrame(np.zeros(len(a)))


(2)添加到loc指定位置
DataFrame.insert(loc, column, value, allow_duplicates=False)




delete
df1.dropna(how='any')


select

筛选行或筛选列:只能查看不能修改
1.筛选行的值
[]里面是范围的,得到的都是行
df[df.A > 0]
df[1:3]
2.筛选列的值
[]里面是标量的,得到的都是列
df[1]
df['user_id']


列和行一起筛选:可以查看可以修改
[]中,可以是标量也可以是list
1.通过index和column的name来筛选
df.loc[df.A >0, 'user_id']
df.loc[1:3, ['user_id', 'day']]
2.通过行和列的序号来筛选
df.iloc[1:3, 1:3]




update
列和行一起筛选:可以查看可以修改
[]中,可以是标量也可以是list
1.通过index和column的name来筛选
df.loc[df.A >0, 'user_id']
df.loc[1:3, ['user_id', 'day']]
2.通过行和列的序号来筛选
df.iloc[1:3, 1:3]


遍历dataFrame
注意:在遍历DataFrame时更改不了row的值
for index, row in df.iterrows:
# row是Series,只有一行
# 在遍历DataFrame时更改不了row的值
row.loc['day'] = 1 #错误的
# 应该更改df的值
df[df['user_id']=123, 'day' ] = 1 #正确的




判断是否为nan
不能用x == np.nan,因为np.nan == np.nan返回false
1.判断是否为nan
b.loc[np.isnan(b.c), :]


2.判断是否为不空
b.loc[~np.isnan(b.c), :]
或者 b.loc[np.isfinite(b.c), :]


3.删除表中全部为np.nan的行
b.dropna(axis=0, how='all')


填充空值:
df.fillna(value=0)


连接两个表:
(1)当left中只有一列,且值不重复时,用来筛选right中的行
right中这一行的on对应的属性必须要在left中出现
pd.merge(left, right, on='key')


分组:


1.对分组value列求和
a.groupby('A').sum()


2.遍历
for name, group in grouped:
    print(name)

    print(group)


一个简单的分组操作:

    def calculate_nearest_column(self, original_pd, column_name, begin_day):
        # 分组以后找到每个key对应value的最大值,并将它的day列转为dataFrame类型,index为user_id
        nearest_option_pd = DataFrame( original_pd.groupby('user_id').max()['day'] )
        # 重置索引,将user_id设置为新的一行
        nearest_option_pd.reset_index(inplace=True)
        # 重置列名
        nearest_option_pd.columns = ['user_id', column_name]



猜你喜欢

转载自blog.csdn.net/djshichaoren/article/details/80820698