Pandas学习笔记

AL算法组——pandas

1,简介

pandas库是基于numpy库进行创建,让numpy为中心的应用更为简单,它具有便捷的数据处理能力,独特的数据结构,并且对文件的读取比较方便。并且Pandas主要用来处理类表格数据,NumPy 主要用来处理数值数据。

2,Dateframe创建

  1. 利用字典直接创建

    d = {'one' : [1, 2, 3,4],
       'two' : [1, 2, 3, 4]}
    df = pd.DataFrame(d)
    

    one two
    0 1 1
    1 2 2
    2 3 3
    3 4 4

  2. 利用numpy库

    df = pd.DataFrame(np.random.randn(2,3))

    0 1 2
    0 -0.258509 1.854810 1.372234
    1 -0.102846 -1.319339 -0.870309

3,对Dateframe的数据更改和提取

1.索引的设置

1.修改行列索引 (必须整体全部修改,不能单独修改某个索引)
df = pd.DataFrame(np.random.randint(5,size = (3,4)))
df.index = ['a','b','c']
print(df)

通过rename对某行或列修改索引

df.rename(index={},columns={},axis=,inplace=)#1.index和columns不与axis连用
#2.其次index=None不要出现在axis参数的字典前面
2.通过索引读取dateframe的某行某列数据

直接使用行列索引(先列后行)

df = pd.DataFrame(np.random.randint(5,size = (3,4)))
df.columns = ['a','b','c','d']
df.index = ['z','x','c']

2

3结合loc或iloc使用索引对多行多列进行操作(先行后列)

loc 通过索引名称访问
iloc 通过索引下标访问,支持切片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jbprCcmJ-1666874901344)(https://gitee.com/sansejindeyihan/images/raw/master/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20221024214952.jpg)]

4.合并两个df使用concat()或append(),删除数据行使用drop()

使用concat()函数,可以将多个df合并,并且可以按行或按列合并

concat([df1,df2,df3……],axis=,join='inner'#只合并相同的列'outter')

使用 append() 函数,可以将两个df合并 ,该函数会按行合并。

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
df = df.append(df2)

a b
0 1 2
1 3 4
0 5 6
1 7 8

​ drop(要删除的行或列的索引,axis= 0或1)删除指定列或者行或列(以上如果需要在原数据上直接做更改,需设置参数inplace=True)

image-20221024222114558

5.缺失数据的处理

1.判断数据是否有缺失值
  • pd.isnull(df)
  • pd.notnull(df)
a = pd.read_excel('pandas.xlsx',names=[1,2,3],header=None)
c = pd.notnull(a)
f = pd.isnull(a)
print(a)
print(f)
print(c)

1 2 3
NaN name age income
0.0 张三 20 1000
1.0 李四 18 2000
2.0 王五 19 3000
1 2 3
NaN False False False
0.0 False False False
1.0 False False False
2.0 False False False
1 2 3
NaN True True True
0.0 True True True
1.0 True True True
2.0 True True True

2.处理NaN
  • 删除缺失值 dropna(inplace=False),前提是缺失值的类型必须是np.NaN

    a = pd.read_excel('website.xlsx',sheet_name='Sheet2',index_col=0)
    b = pd.read_excel('website.xlsx',sheet_name='Sheet4',index_col=0)
    c = pd.DataFrame({'name':['张三','李四','王五','钱六'],'age':[17,18,21,32],'grade':[98,99,79,89],'salary':[2500,3000,5000,4500]},index=['a','b','c','d'])
    x = pd.concat([b,a],axis=1)
    print(x.dropna(axis=1,how='all'))
    print(x.dropna(axis=1,how='any'))
    
          name  rank language                 url  name   age  grade  salary
    

    0 编程帮 1.0 PHP www.bianchneg.com NaN NaN NaN NaN
    1 c语言中文网 2.0 C c.bianchneg.net NaN NaN NaN NaN
    2 微学苑 3.0 PHP www.weixueyuan.com NaN NaN NaN NaN
    3 92python 4.0 Python www.92python.com NaN NaN NaN NaN
    a NaN NaN NaN NaN 张三 17.0 98.0 2500.0
    b NaN NaN NaN NaN 李四 18.0 99.0 3000.0
    c NaN NaN NaN NaN 王五 21.0 79.0 5000.0
    Empty DataFrame
    Columns: []
    Index: [0, 1, 2, 3, a, b, c]

  • 替换缺失值 fillna(value,inplace=False)

4.导入导出excel文件

1.导入
b = pd.read_excel('pandas.xlsx',sheet_name= #表示要导入的单元格 ,header= 
#为0表示以数据第一行为列名,为1表示以第二行为列名,若文件没有标题行要使用header=None, unicode= #要提取的列名,name=#传入一列类数组类型的数据,用来作为数据的列名)
2.导出
1.导出一个新excel
#创建所要导出的df数据
a = pd.DataFrame({'name': ['编程帮', 'c语言中文网', '微学苑', '92python'],
     'rank': [1, 2, 3, 4],
     'language': ['PHP', 'C', 'PHP','Python' ],
     'url': ['www.bianchneg.com', 'c.bianchneg.net', 'www.weixueyuan.com','www.92python.com' ]})
#创建excel文件对象
b = pd.ExcelWriter('website.xlsx')
#开始导出
a.to_excel(b)
b.save()
c = pd.read_excel('website.xlsx')
print(c)

Unnamed: 0 name rank language url
0 0 编程帮 1 PHP www.bianchneg.com
1 1 c语言中文网 2 C c.bianchneg.net
2 2 微学苑 3 PHP www.weixueyuan.com
3 3 92python 4 Python www.92python.com

2.将数据导入已有的文件中
a = pd.DataFrame({'name':['张三','李四','王五','钱六'],'age':[17,18,21,32],'grade':[98,99,79,89],'salary':[2500,3000,5000,4500]},index=['a','b','c','d'])
with pd.ExcelWriter('website.xlsx',mode='a') as w:#mode=a表示不覆盖原内容
    a.to_excel('website.xlsx',sheet_name='Sheet2')

5.导入导出csv文件

  • pd.read_csv(‘filepath_or_buffer’, usecols=[]) 读取csv文件数据
    • filepath_or_buffer:文件路径
    • sep:分隔符,默认为’,’
    • usecols:指定读取的列名,列表形式
  • df.to_csv(path_or_buf,columns=[],index=True,mode=‘w’) 将数据存储到csv文件中
    • path_or_buf:文件存放的路径
    • sep:分隔符,默认为’,’
    • columns:列,列表形式
    • mode:‘w’:重写,‘a’:追加
    • header:是否写进列索引值
    • index:是否写进行索引,默认True写进行索引,会将行索引变成一列数据
      encoding:编码格式,默认为None

6.Pandas描述性统计

描述统计学(descriptive statistics)是一门统计学领域的学科,主要研究如何取得反映客观现象的数据,并以图表形式对所搜集的数据进行处理和显示,最终对数据的规律、特征做出综合性的描述分析。Pandas 库正是对描述统计学知识完美应用的体现,可以说如果没有“描述统计学”作为理论基奠,那么 Pandas 是否存在犹未可知。下列表格对 Pandas 常用的统计学函数做了简单的总结:

image-20221026211401123

示例:以sum为例

d = {'Name':pd.Series(['小明','小亮','小红','小华','老赵','小曹','小陈',
   '老李','老王','小冯','小何','老张']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
#也可使用sum("columns")或sum(1)
print(df.sum(axis=1))

0 29.23
1 29.24
2 28.98
3 25.56
4 33.20
5 33.60
6 26.80
7 37.78
8 42.98
9 34.80
10 55.10
11 49.65

7.dateframe的分组求和

1.形式:

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=NoDefault.no_default, observed=False, dropna=True)

示例:

df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',
                              'Parrot', 'Parrot'],
                  'Max Speed': [380., 370., 24., 26.]})
a = df.groupby(['Animal']).mean()#按照Animal列的值进行分组,分组后的falcon对应的                                           MaxSpreed是原来falcon对应的MaxSpreed的均值
print(a)

​ Max Speed

Animal
Falcon 375.0
Parrot 25.0

一行代码生成所有分组求和,求均值等
df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',
                              'Parrot', 'Parrot'],
                  'Max Speed': [380., 370., 24., 26.]})
a = df.groupby(by='Animal')['Max Speed'].describe().unstack()
print(a)`

​ Animal
count Falcon 2.000000
​ Parrot 2.000000
mean Falcon 375.000000
​ Parrot 25.000000
std Falcon 7.071068
​ Parrot 1.414214
min Falcon 370.000000
​ Parrot 24.000000
25% Falcon 372.500000
​ Parrot 24.500000
50% Falcon 375.000000
​ Parrot 25.000000
75% Falcon 377.500000
​ Parrot 25.500000
max Falcon 380.000000
​ Parrot 26.000000
dtype: float64

8.日期创建和转化等处理

1.日期创建

rn = pd.date_range('1/1/2011', periods=2, freq='d')                             #后两个参数分别是时间次数和变化频度
ts= pd.Series(np.random.randn(len(rn)), index=rn)
converted = ts.asfreq('360Min', method='pad')                                   #通过使用asfreq改变频率函数设定每次频率改变可以设定每个时间片都对应一个值
print(rn)
print(ts)
print(converted)

DatetimeIndex([‘2011-01-01’, ‘2011-01-02’], dtype=‘datetime64[ns]’, freq=‘D’)

2011-01-01 2.045450
2011-01-02 -1.102479
Freq: D, dtype: float64

2011-01-01 00:00:00 2.045450
2011-01-01 06:00:00 2.045450
2011-01-01 12:00:00 2.045450
2011-01-01 18:00:00 2.045450
2011-01-02 00:00:00 -1.102479
Freq: 360T, dtype: float64

3.处理不合法的日期格式

使用to_datetime()

pandas.to_datetime(arg,eerors=‘ignore’,dayfirst=False,yearfirst=False,utc=None,box=Ture,
format=None,exact=Ture,unit=None,infer_datetime_format=False,origin=‘unix’,cache=False)

参数说明

arg: 字符串、日期时间、字符串数组
errors:igonre无视错误,raise无效的解析将引发异常,coerce无效解析设置为NaT。
dayrirst: 类型为布尔值,默认False;如果为True,解析第一个为天,例如:01/05/2022,解析为2022-05-01
yearfirst:类型:布尔值,默认False;如果为True,解析第一个为年,例如:22-05-01,解析为2022-05-01
utc: 默认为None,返回utc,即协调时间时间
box: 布尔值,默认为True,返回DatetimeIndex;如果为False,返回值的ndarray.
format :格式化显示时间的格式。字符串,默认值为None**#处理数据大的时候要加上**
exact: 布尔值,默认False.如果为True,则要求格式完全区配;如果为False,则允许格式与目标字符串中的任意位置区配
infer_datetime_format: 默认为False.没有格式,尝试根据第一个日期推断出格式
origin: 默认unix。定义参考日期。数值将解析为单位数。
cache: 默认值为False。设置True启动缓存加速。

示例:

a = pd.DataFrame({'date':['02.01.2013',
  '03.01.2013',
  '05.01.2013',
  '06.01.2013' ,
  '90.01.2013']})
a['date_formatted']=pd.to_datetime(a['date'],errors='ignore',format='%m.%y.%d')
print(a)
     date date_formatted

0 02.01.2013 02.01.2013
1 03.01.2013 03.01.2013
2 05.01.2013 05.01.2013
3 06.01.2013 06.01.2013
4 90.01.2013 90.01.2013

8. 对某一列数据进行排序

// ascending默认参数为True,表示升序;False表示降序
df=df.sort_values(by='列名',ascending=True)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值