pandas常用操作

pandas

1. pandas中主要有两种数据结构,分别是:Series和DataFrame。
2. Series:一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。注意:Series中的索引值是可以重复的。

基本操作

DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)

  1. df = pd.read_csv(‘train.csv’):读取文件

  2. df.head(n):只显示前n条数据

  3. df.info():获得DataFrame的详细信息

  4. df.index:获取索引范围

  5. df.columns:获取列名都有哪些

  6. df.dtypes:显示数据类型

  7. df.values:获取df的数据

  8. pd.DataFrame([[1, 2, 3], [4, 5, 6]], index=[‘a’, ‘b’], columns=[‘A’, ‘B’, ‘C’])

  9. pd.Series(data = [1,2,3],index=[‘a’,‘b’,‘c’]):创建Series关键一个是数据,一个是索引

  10. df[‘列名’]:获取一列的数据

  11. df[[‘列名1’,‘列名2’]]:获取多列数据需要用列表传入

  12. df.iloc[]:根据位置去获取信息,可以筛选行以及筛选列

  13. df.loc[]:根据索引的值来获取相关信息,可以结合设置索引一起使用,也可以使用bool类型作索引,如

    定位行列:data.loc[行索引, 列名]
    只定位行:data.loc[行索引]
    df.loc[df['Sex']=='male','Age']
    
  14. df = df.set_index(‘Name’):设置df的索引,索引可以使用某一列

  15. df.describe():获取数据基本统计情况

  16. df.groupby(‘分组名’)

    #1.直接进行运算
    df.groupby('key')['哪一列'].sum()
    #2.通过numpy进行
    df.groupby('key')['哪一列'].aggregate(np.sum())
    

常用操作

  • df.sort_values(by=‘group’,ascending=False):对某一列排序,ascending:是否升序

  • df.sort_values(by=[‘group’,‘data’],ascending=[False,True]):对两列排序

  • df.drop_duplicates(‘data’):去重

  • df.apply(func, axis=0)

    def data_fun(series):
        if series['data']<6:
            return 'A'
        else:
            return 'B'
    data['pingjia'] = data.apply(data_fun,axis='columns')
    
  • map

    groupTran = {
        'a':'A',
        'b':'B',
        'c':'C'
    }
    data['upper'] = data['group'].map(groupTran)
    
  • df.assign():重新分配一列

  • df.isnull():查看是否有缺失值,默认按列

  • df.fillna():填充缺失值

数值运算

df.sum():二维默认对列求和

df.sum(axis = 0):对列求和

df.sum(axis = 1):对行求和

df[‘列名’].value_counts(ascending=True, bins=5):统计某一列中各数据的个数,默认按个数降序排列,ascending可以设置按升序排列,bins=5设置5个范围,统计各个范围中数据个数

对象操作

1.修改值

df.replace(to_replace=1, value=100, inplace=True)

to_replace:要替换的值,value:替换成什么值,inplace:是否在原数据上更改

df.loc['行名']['列名']=修改的值

**2.修改索引 **

df.index=[]:直接通过赋值修改索引

df.rename(index={‘a’:‘A’,‘b’:‘B’},inplace=True):通过字典结构来确定谁改成谁

3.添加元素

Series中:

添加一行
s['d']=4
添加多行
s.append(s2,ignore_index=False)
ignore_index为True,则忽略之前的索引,为False则保留之前的索引

DataFrame中:

添加一行
df.loc['索引']=[7, 8, 9]
添加多行
pd.concat([df,df2],axis=0)
axis默认是0,竖着连接,axis=1时水平连接
添加一列
df2['列名'] = [4]
添加多列
print(pd.concat([df2,df3],axis=1))

4.删除元素

DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)

labels:要删除的列或者行,如果要删除多个,传入列表

axis :轴的方向,0为行,1为列,默认为0

index :指定要删除的行

columns :指定要删除的列

inplace=False,删除操作不改变原数据,而是返回一个执行删除操作后的新dataframe(默认);

inplace=True,在原数据上进行删除操作。

merge操作

合并操作

pd.merge(left,right,on=‘key1’,how=‘outer’,indicator=True)

  • on是以什么为键进行合并

当on中的键有多个时,用列表进行传递,同时只会取相同的键进行合并,不相同的自动略去

  • how指定outer时,不相同的key也会分条显示,指定left时,左表的键会全部存在
  • indicator:指示器,可以显示合并的情况

在这里插入图片描述

显示操作

pd.get_option(‘display.max_rows’) :查看最多显示多少行

pd.set_option(‘display.max_rows’,100):修改为最多显示100行

pd.get_option(‘display.max_columns’):查看最多显示多少列

pd.get_option(‘display.max_colwidth’):查看每列最多显示多少个字符

pd.get_option(‘display.precision’) #精度,几位小数

透视表

df.pivot_table(index=‘Sex’,columns=‘Pclass’,values=‘Fare’,aggfunc=‘max’)

index:按照什么来作索引,也可以有双重索引

values:对哪些数据作操作

aggfunc:默认是求平均值,max最大值,count求个数

补充:

pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None,)

index, columns是必选参数,分别是行索引、列索引
crosstab归根结底就是按照指定的index和columns统计数据帧中出现(index, columns)的频次。也可以理解为分组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hyzJpK4s-1659164758651)(C:\Users\Judy\AppData\Roaming\Typora\typora-user-images\image-20220729134424703.png)]

时间操作

ts = pd.Timestamp(“2022-07-29 14:33:58”):获取时间戳

ts.month:获取月份

ts+pd.Timedelta(‘5 days’):加上五天

pd.to_datetime(‘2022-07-29’):将字符串转换成时间戳

pd.date_range(start=‘2022-07-29’,periods=10,freq=‘12H’):periods:有几条数据,freq是间隔

Pandas中的resample,重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法。

DataFrame.resample(rule,label):

rule: 表示重采样频率,例如‘M’、‘5min’,Second(15)

lable:在降采样时,如何设置聚合值的标签,例如,9:30-9:35会被标记成9:30还是9:35,默认9:35,默认为lable=‘right’

groupby深入

分组的结果如果不显示,可以通过.count()去查看

  • df.groupby(函数名,axis=None):自定义函数分组

    def get_letter(letter):
        if letter.lower() in 'aeiou':
            return 'a'
        else:
            return 'b'
    grouped = df.groupby(get_letter,axis='columns')
    grouped.count()
    
  • df.groupby(None).groups:查看分组情况

  • df.groupby(level=‘列名’):按照哪一列进行分组

  • df.groupby(level=0):按照第一列分组

  • df.groupby(None).get_group(‘组名’):查看每组的内容

  • index = pd.MultiIndex.from_arrays(arrars,names=[‘First’,‘Second’]):

    arrars = [['bar','bar','baz','baz'],
              ['one','two','one','two']]
    index = pd.MultiIndex.from_arrays(arrars,names=['First','Second'])
    df = pd.DataFrame([[1,2,3],[4,5,6],[5,6,7],[7,8,9]],index = index, columns = ['A','B','C'])
    df
    
  • df.groupby([‘A’,‘B’],as_index=False).aggregate(np.sum):分组后进行求和操作,类似的可以与np结合使用,as_index为False时,重新指定索引

  • df.groupby([‘A’,‘B’]).sum().reset_index():

    reset_index():重新指定索引

字符串操作

  • s.str.lower():将字符变成小写
  • s.str.upper():
  • s.str.len():显示每个数据的长度
  • s.str.strip():去除数据两边的空格
  • df.str.replace(‘要替换的’,’替换成的‘)
  • s.str.stlit(‘分隔符’,expand=False,n=-1):

expand:为True可以直接将分列后的结果转换成DataFrame

n:分列的次数,不指定默认是根据符号的个数全部分列

  • s.str.contains(‘’):是否包含字符串

  • s.str.get_dummies(sep=‘’):关联分析,返回仅具有二进制值的DataFrame

    s = pd.Series(['a','a|b','a|c'])
    s
    0      a
    1    a|b
    2    a|c
    
    s.str.get_dummies(sep = '|')
    	a	b	c
    0	1	0	0
    1	1	1	0
    2	1	0	1
    

索引

  • s.isin([1,4]):判断s中的元素是否在列表中,如果有就是True,同时s[s.isin([1,4])]返回在列表中的元素
  • 二维索引s22.index.isin([(1,‘a’),(0,‘b’)]):判断s22中的索引是否在列表元素中
  • df.where(df<0):只显示df中小于0的数据,其余默认为NaN
  • df.where(df<0,-df):找出df中小于0的数据,其余默认为-df
  • df.query(‘(列名1<列名2 & 其余条件)’):找出符合条件的数据

多重索引

多重索引如果要写别名,names=这个属性名一定要写,否则报错

1.通过from_arrays()方法创建MultiIndex对象

from_arrays()方法是将数组列表转换为MultiIndex对象,其中嵌套的第一个列表将作为外层索引,嵌套的第二个列表将作为内层索引

multi_array = MultiIndex.from_arrays(arrays=[['A', 'B', 'A', 'B', 'B'],
                                             ['A1', 'A2', 'B1', 'B2', 'B3']],
                                     names=['外层索引', '内层索引'])

测试如下:

value1 = np.arange(10).reshape(5, 2)
df_array = pd.DataFrame(data=value1, index=multi_array,columns=['a','b'] )
print(df_array)
           a  b
外层索引 内层索引      
A    A1    0  1
B    A2    2  3
A    B1    4  5
B    B2    6  7
     B3    8  9

2.通过from_product()方法创建MultiIndex对象

from_product()方法表示从多个集合的笛卡尔积中创建一个MultiIndex对象

multi_product = pd.MultiIndex.from_product(
    iterables=[[0, 1, 2], ['green', 'purple']],
    names=['number', 'color'])
value2 = np.arange(12).reshape(6, 2)
df_product = pd.DataFrame(data=value2, index=multi_product,columns=['a','b'])
print(df_product)
                a   b
number color         
0      green    0   1
       purple   2   3
1      green    4   5
       purple   6   7
2      green    8   9
       purple  10  11

两者区别:

form_product():是返回列表的笛卡尔积,如上面例子中外层索引3个,内层索引2个,则共有6个索引

form_arrays():是返回列表,两个列表中元素个数一定要相同,如上述例子中共有5个索引

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值