Pandas基础-常用数据类型

本文介绍了Pandas中的Series和DataFrame数据类型。Series可视为带索引的一维数组,可由dict、ndarray或单一值创建。DataFrame则类似表格数据,支持多种创建方式,如字典或Series组合。文章详细讲解了如何读取元素、创建、查询、排序、删除、选择/切片、合并、分组、选取行或列等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pandas里有数据类型主要有三种:Series、DataFrame和Panel。

(一)Series

Series可以理解为一个一维的数组,只是index可以自己改动。创建的方法统一为pd.Series(data,index=)。Series可以通过三种形式创建:python的dict、numpy当中的ndarray(numpy中的基本数据结构)、具体某个数值。index赋值必须是list类型。

1.创建Series

(1)Python的dict创建:

s = pd.Series({‘a’=1,’b’=2,’d’=3},index = [‘a’,’d’,’c’,b’])

(2)numpy中的ndarray:

pd.Series(np.random.randn(5), index = list('ABCDE')

(3)具体某个值

s=pd.Series([5,4])

2.读取元素

通过索引读取:一种是通过index对应的标签;另一种就是通过绝对位置查看。

s = pd.Series(5., index=['a', 'b', 'c', 'd', 'e'])

s[0]

输出:5.0

 

s[[4,3,1]]

输出:e    5.0

     d    5.0

     b    5.0

     dtype: float64

 

s[s>1]

输出:a    5.0

     b    5.0

     c    5.0

     d    5.0

     e    5.0

     dtype: float64

s[a]

输出:5.0

 

(二)DataFramme

DataFrame是一个类似于表格的数据类型,如图:

 

1.创建

DataFrame可以理解为一个二维数组,统一的创建形式为:pd.DataFrame(data,columns=,index=),其中columns为列的索引,index为行的索引,data为数据。Data创建方式如下:

(1)将字典或者Series组合成列表进行创建

a = {'a':1,'b':2}

b = pd.Series([1,2,3],index=list('abc'))

pd.DataFrame([a,b],columns = list('abcd'))

输出:a  b    c   d

  0  1  2  NaN  NaN

  1  1  2  3.0   NaN

(2)将两者放入字典里面创建

a = {'a':1,'b':2}

b = pd.Series([1,2,3],index=list('abc'))

data = {'one':a,'two':b}

pd.DataFrame(data,columns = ['one','two','a','d'])

输出:one  two    a    d

  a  1.0    1  NaN  NaN

  b  2.0    2  NaN  NaN

  c  NaN    3  NaN  NaN

2.查询

DataFrame.head可以查询前几行的数据,默认为前五行;DataFrame.tail查看后几行书,默认为5行;DataFrame.describe查看全部数据。

3.排序

df.sort_index(axis=,ascending=) axis为0/1的参数,表示按行/按列排序;ascending为boolean参数,False表示降序,True表示升序。

df.sort_values(by=,ascending=) by表示按哪一个columns参数排序。

4.删除

使用del或者pop(‘columns’)方法。需要注意的是所有删除的方法都会改变原来DataFrame,而不是像其他方法一样内存当中新建一个DataFrame。pop由于弹出特定的列,会返回被弹出的列中的数值.

5.选择/切片

用columns选择列,用index选择行。注意:选择列的时候单次只能选择某一列的数据,不能同时选择多列;而使用index的时候一定要使用范围(类似于[1:2]),单独某个index会报错。

df['one']>2

输出:A    False

     B     True

     Name: one, dtype: bool

 

df['two']

输出:A    2

     B    5

     Name: two, dtype: int64

 

df[:1]

输出:one  bar  two  three  fore  five

A    1    1    2      3     1   1.0

 

使用loc方法,通过位置标签选择,统一格式为DataFrame.loc[index:index,[‘columns’]],loc方法当中的columns可以选择多列,如果表示只按列选择的话index可以不填但是冒号(:)和逗号(,)一定要写。

df.loc[:,['two','one']]

输出:two  one  

A    2    1

B    5    4

 

df.loc['A':'B',['one','two']]    

输出:one  two

A    1    2

B    4    5

 

另外,如果loc还能这么用:DataFrame.loc[index,[‘columns’]],这时的index为特定能够的label或值,这样用会返回一个Series;DataFrame.loc[index,‘columns’],这里面的index和columns都是唯一的,返回一个值。由于降维的问题,pandas会对精度进行转换。

df.loc['A',['one']]

输出:one    1.0

     Name: A, dtype: float64

 

df.loc['A','one']

输出:1.0

 

使用iloc方法,通过绝对位置选择,思路与loc方法基本相同,只是把标签换成绝对位置。

df.iloc[[0,1],2:3]

输出:two

A    2

B    5

使用where操作通过表达式过滤部分值

df[df>3]

isin([value])方法: 通过isin方法可以得到特定列当中与变量值相等的行,返回一个DataFrame。

df[df['one'].isin([1])]

输出:one  bar  two  three  fore  five

A    1    1    2      3     1   1

 

6.添加或修改

直接赋值

df['fore'] = 1

df['five'] = df['one'][:1]

此外也可以通过insert(loc, column, value, allow_duplicates=False)方法

df.insert(1, 'bar', df['one'])

7.合并

pd.concat(objs,ignore_index,…) 可以多个DataFrame进行合并,其中objs是一个包含series或DataFrame或Panel的序列,ignore_index是boolean值,用来确定要不要重新对index从0开始赋值。

frames = [df1, df2, df3]

result = pd.concat(frames)

pd.merge(df1,df2,…..) 。df1在合并后的上面df2在合并后的下面。同时merge会重新分配index,不会出现index重合。merge是个大坑,合并完一定是个乱七八糟的。

DataFrame.append(object,ignore_index) 在DataFrame尾部添加一个object,可以是DataFrame也可以是Series。

8.分组

分组是通过groupby命令实现的,主要实现的功能是按照一些规则将数据分为不同的组;对于每组数据分别执行一个函数;将结果组合到一个数据结构中。

DataFrame.groupby(by=None, axis=0, as_index=True)

by是按照分组的列名;axis是作用维度,0为行,1为列;as_index指的是分组依据是否作为索引存在,有多个分组依据时,会合并成一个tuple,作为一列。

通过aggregate(arg)方法可以打印分好组的group,arg可以为dict类型或者list类型。

通过agg(arg)方法对分好组的group进行计算(arg可以为dict类型或者list类型)。

g = df.groupby('A')

g['D'].agg([np.mean])

输出:mean

A

bar     1

foo     1

9.选取行或列

    9.1选择列

    返回Series

    data['w']  #选择表格中的'w'列,使用类字典属性,返回的是Series类型

    data.w    #选择表格中的'w'列,使用点属性,返回的是Series类型

    data.icol(0)   #取data的第一列

    返回DataFrame

    data['a':'b']  #利用index值进行切片,返回的是**前闭后闭**的DataFrame, 

    data[['w']]  #选择表格中的'w'列,返回的是DataFrame属性

    data[['w','z']]  #选择表格中的'w'、'z'列

    9.2选择行:

    data.irow(0)   #取data的第一行

    data[0:2]  #返回第1行到第2行的所有行,前闭后开,包括前不包括后

    data[1:2]  #返回第2行,从0计,返回的是单行,通过有前后值的索引形式,

    data.ix[1:2] #返回第2行的第三种方法,返回的是DataFrame,跟data[1:2]同

10.去掉重复数据

DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)

 

11.从DataFrame中提取出Series或DataFrame对象

df = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'],

                   'data1': range(6)})

type(df['data1'])   #pandas.core.series.Series

type(df[['data1']])  pandas.core.frame.DataFrame

 

 

(三)Panel/PanelND

Panel可以理解为三维数组,panelND可以理解为N维数组。统一的创建方法就是pd.Panel(data,items=,major_axis=,minor_axis=),三个维度就分别是items、major_axis、minor_axis。

在创建panel的时候一般会采用两种形式(和DataFrame类似,照搬就行):采用字典;使用items参数创建。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值