pandas的axis参数

'''
axis = 0 或 index:如果是单行操作,就是指的是某一行;如果是聚合操作,指的是跨行cross rows

axis = 1 或 columns:如果是单列操作,就指的是某一列;如果是聚合操作,指的是跨列cross columns

按哪个axis,就是这个axis要动起来(类似被for遍历),其他的axis保持不动 
'''
import pandas as pd 
import numpy as np
df = pd.DataFrame(np.arange(12).reshape(3,4),columns=['A','B','C','D'])
df
ABCD
00123
14567
2891011
#(1)单列drop,就是删除某一列
df.drop('A',axis=1)#注意,这个表达式的返回值是B,C,D下表,df仍然没有变化
BCD
0123
1567
291011
df
ABCD
00123
14567
2891011
#(2)单行drop,就是删除某一行
df.drop(1,axis=0)#注意索引删除的必须是Index号
ABCD
00123
2891011
df
ABCD
00123
14567
2891011
#(3)比较难理解的,按axis=0/index执行mean的聚合操作
df.mean(axis = 0)#行的值动起来,跨行操作,每个行都要运算一次,但是列保持不动
A    4.0
B    5.0
C    6.0
D    7.0
dtype: float64
df.mean(axis = 1)#同上解释
0    1.5
1    5.5
2    9.5
dtype: float64
#再次举例,增加列,增加列的值为sum和
def get_sum_value(x):
    return x['A']+x['B']+x['C']+x['D']
df['sum_value'] = df.apply(get_sum_value,axis = 1)#也就是行不动,将一行的值求和生成新的值
df
ABCDsum_value
001236
1456722
289101138
df['row_sum_value'] = df.apply(get_sum_value,axis = 0)
#报错,是因为 get_sum_value是按照label取值的,如果需要axis=0运算,函数需要按照index取值?不知道是不是这个原因
---------------------------------------------------------------------------

KeyError                                  Traceback (most recent call last)

<ipython-input-17-c2186b52adab> in <module>
----> 1 df['row_sum_value'] = df.apply(get_sum_value,axis = 0)


C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py in apply(self, func, axis, broadcast, raw, reduce, result_type, args, **kwds)
   6485                          args=args,
   6486                          kwds=kwds)
-> 6487         return op.get_result()
   6488 
   6489     def applymap(self, func):


C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\apply.py in get_result(self)
    149             return self.apply_raw()
    150 
--> 151         return self.apply_standard()
    152 
    153     def apply_empty_result(self):


C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\apply.py in apply_standard(self)
    255 
    256         # compute the result using the series generator
--> 257         self.apply_series_generator()
    258 
    259         # wrap results


C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\apply.py in apply_series_generator(self)
    284             try:
    285                 for i, v in enumerate(series_gen):
--> 286                     results[i] = self.f(v)
    287                     keys.append(v.name)
    288             except Exception as e:


<ipython-input-15-0e2329bd7c2c> in get_sum_value(x)
      1 #再次举例,增加列,增加列的值为sum和
      2 def get_sum_value(x):
----> 3     return x['A']+x['B']+x['C']+x['D']
      4 df['sum_value'] = df.apply(get_sum_value,axis = 1)


C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py in __getitem__(self, key)
    866         key = com.apply_if_callable(key, self)
    867         try:
--> 868             result = self.index.get_value(self, key)
    869 
    870             if not is_scalar(result):


C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_value(self, series, key)
   4373         try:
   4374             return self._engine.get_value(s, k,
-> 4375                                           tz=getattr(series.dtype, 'tz', None))
   4376         except KeyError as e1:
   4377             if len(self) > 0 and (self.holds_integer() or self.is_boolean()):


pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_value()


pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_value()


pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()


pandas/_libs/index_class_helper.pxi in pandas._libs.index.Int64Engine._check_type()


KeyError: ('A', 'occurred at index A')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值