Pandas

Posted c-pyday

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas相关的知识,希望对你有一定的参考价值。

pandas介绍

  pandas 是基于NumPy 的一种工具,提供了大量能使我们快速便捷地处理数据的函数和方法。它是使Python成为强大而高效的数据分析环境的重要因素之一。我们知道numpy能够帮助我们处理数值型数据,但是这还不够,除数值型数据以外,我们还有能够处理字符串数据、时间序列等数据。所以,pandas的除了能处理数值型数据,还可以帮助我们处理其他类型的数据。(字符串、时间序列等数据)

Pandas的常用数据类型

       1. Series 一维(带标签数组)

       2. DataFrame 二维 (Series容器)

一、Series的创建

   Series对象本质上由两个数组构成(键:值):一个数组构成对象的键(index(索引)),另一个是值(values)

 

1.通常的创建方式

import pandas as pd
a = pd.Series([1,2,3,4],index=list("abcd"))    #创建序列  index为指定索引的值 默认:0,1,2....
print(a)

"""
输出结果
a    1
b    2
c    3
d    4
dtype: int64
"""

 

2.字典方式创建

import pandas as pd
dict = {"name":"zhangsan","age":12,"tel":100}
data = pd.Series(dict)
print(data)
print(type(data))       #输出data的数据类型为Series

"""
运行结果:
name    zhangsan
age           12
tel          100
dtype: object
<class ‘pandas.core.series.Series‘>
"""

  也可以用data.dtye查看数据类型,如果要修改数据类型,则data.astype(float)

 

Series取值

import pandas as pd
dict = {"name":"zhangsan","age":12,"tel":100}
data = pd.Series(dict)

print("键取值:")
print(data[‘age‘],data[‘tel‘]) #通过键取值

print("位置取值:")
print(data[0],data[1]) #通过位置取值

print("前两行:")
print(data[:2]) #取前两行

print("不连续的:")
print(data[[0,2]]) #取不连续的 或者data[["name","tel"]]


"""
运行结果:
键取值:
12 100
位置取值:
zhangsan 12
前两行:
name zhangsan
age 12
dtype: object
不连续的:
name zhangsan
tel 100
dtype: object
"""

 data[data>55] 选出大于55的值。切片:data[0:2:1]

 

其他操作

import pandas as pd
dict = {"name":"zhangsan","age":12,"tel":100}
data = pd.Series(dict)
print(data.index)           #取索引
print(data.values)          #取值


"""
运行结果:
Index([‘name‘, ‘age‘, ‘tel‘], dtype=‘object‘)
[‘zhangsan‘ 12 100]
"""

 

 

二、pandas读取外部数据

import pandas as pd

#读取csv中的文件
# df = pd.read_csv("文件路径")    #如:pd.read_csv("data_file//data.csv")

#读取mysql中的数据
# import pymysql
# conn = pymysql.connect(host=‘localhost‘, user=‘root‘, passwd=‘root‘, db=‘anjuke‘)
# sql_sentence = "select * from lp_home"
# df = pd.read_sql(sql_sentence,conn)


#读取MongoDB中的数据
# from pymongo import MongoClient
# client = MongoClient()
# collection = client["数据库名"]["表名"]
# data = list(collection.find())

 

 

三、DataFrame

DataFrame对象既有行索引,又有列索引

  行索引:表名不同行,横向索引(index),0轴,axis=0

  列索引:表名不同列,纵向索引(columns),1轴,axis=1

1.通常创建方式:


import pandas as pd
import numpy as np

#index:行索引   columns:列索引  reshape:改变数组格式(三行四列)
pf = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))        
print(pf)

"""
运行结果: w x y z a 0 1 2 3 b 4 5 6 7 c 8 9 10 11 """

 

2.字典方式创建:

import pandas as pd
import numpy as np

dict = {"name":["张三","李四"],"age":[12,20],"tel":[100,101]}
pf = pd.DataFrame(dict)
print(pf)
dict1 = [{"name":"张三","age":12,"tel":100},{"name":"李四","age":20,"tel":101}]
pf1 = pd.DataFrame(dict1)
print(pf1)

"""
运行结果:
  name  age  tel
0   张三   12  100
1   李四   20  101
  name  age  tel
0   张三   12  100
1   李四   20  101
"""

 两种方式都是一样的结果

 

3.DataFrame的基础属性

  df.shape  #行数 列数    

  df.dtpyes  #列数据类型

  df.ndim  #数据维度

  df.index  #行索引

  df.columns  #列索引

  df.values  #对象值,二维ndarray数组

import pandas as pd
import numpy as np

dict = {"name":["张三","李四"],"age":[12,20],"tel":[100,101]}
pf = pd.DataFrame(dict)
#pf.index  行索引
print(pf.index)
#pf.columns     列索引
print(pf.columns)
#pf.values     对象值
print(pf.values)
#pf.shape   行数、列数
print(pf.shape)
#pf.dtypes  列数据类型
print(pf.dtypes)


"""
运行结果:
RangeIndex(start=0, stop=2, step=1)
Index([‘name‘, ‘age‘, ‘tel‘], dtype=‘object‘)
[[‘张三‘ 12 100]
 [‘李四‘ 20 101]]
(2, 3)
name    object
age      int64
tel      int64
dtype: object
"""

 

4.DataFrame整体情况查询

  df.head(3)    #显示头部3行,默认5行

  df.tail(3)    #显示末尾3行,默认5行

  df.info()    #相关信息概述:行数、列数、列索引、列非空值个数、列类型、内存占用        可以用来判断缺失值

  df.describe()    #快速综合统计结果:计数,均值,标准差,最大值,四分位数,最小值

 

5.排序

import pandas as pd
import numpy as np

dict = {"name":["张三","李四"],"age":[12,20],"tel":[100,101]}
pf = pd.DataFrame(dict)
#按照某列排序 sort = pf.sort_values(by="age",ascending=False) #by:按哪个属性进行排序 ascending=False 降序排序 ascending默认为True 升序 print(sort) """ 运行结果: name age tel 1 李四 20 101 0 张三 12 100 """

 

6.切片

  df[:20]  取前20行

  df[‘age‘]  取age列

  df[:20][‘age‘]  取age列的前20行

注意:

  *方括号写数组,表示取行,对行进行操作

  *方括号写字符串,表示取列,对列进行操作

 

7.loc选择方式

  df.loc通过标签索引行数据

  df.iloc通过位置获取行数据

import pandas as pd
import numpy as np

pf = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))
pf.loc[:,"w"]    #取w列
pf.loc["a",:]    #取a行
#选取索引b行w z的值 print(pf.loc["b",["w","x"]]) #选取多行多列的值 print(pf.loc[["a","b"],["w","x"]]) #选取连续行多列的值 print(pf.loc["a":"c",["w","x"]]) """ 运行结果: w 4 x 5 Name: b, dtype: int32
w x a 0 1 b 4 5
w x a 0 1 b 4 5 c 8 9
"""
import pandas as pd
import numpy as np

pf = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))
# #选取索引b行w z的值

pf.iloc[1,:]     #取第2行
pf.iloc[:,2]     #取第3列
pf.iloc[[1,2],[0,1]]  #取2,3行的1,2列
pf.icol[1:,:2]   
pf.iloc[[1,2],[0,1]] = 100   #可赋值操作

 

取值条件

import pandas as pd
import numpy as np

pf = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))
# print(pf)
#获取x列值大于1小于10的行
print(pf[(pf["x"]>1)&(pf["x"]<10)])         #注意:不同的条件之间需要用括号括起来

 

 

 

四、布尔索引

 缺失值数据处理

  缺失值一个分为两种情况:一种是空与None   另一种是某些为0的数据      注意:pandas的NaN和np.nan是一样的

import pandas as pd
import numpy as np

pf = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))
# print(pf)


pf.iloc[[1,2],0] = ""
pf.iloc[0,0] = 1
print(pf)

#处理w列为空的值
a = pf[w].fillna(0)
a[a==‘‘] = np.nan
pf[w] = a
print(pf)


"""
运行结果:
   w  x   y   z
a  1  1   2   3
b     5   6   7
c     9  10  11
     w  x   y   z
a    1  1   2   3
b  NaN  5   6   7
c  NaN  9  10  11
"""


#判断数据是否为NaN:pd.isnull(pf),  pd.notnull(pf)
# print(pd.isnull(pf))

#处理方式1:删除NaN所在的行列dropna(axis=0,how=‘any‘,inplace=False)
# print(pf.dropna(axis=0))        #删除含有NaN的行
# print(pf.dropna(axis=0,how=‘any‘,inplace=False))          #删除含有NaN的行    inplace:是否原地修改
# print(pf.dropna(axis=0,how=‘all‘))          #必须每行都有NaN才删除

#处理方式2:填充数据,t.fillna(t.mean()),  t.fiallna(t.median()),  t.fillna(0)
# print(pf.fillna(100))           #操作全部
# print(pf[‘w‘].fillna(0))         #操作具体的某一列

#处理为0的数据:t[t==0]=np.nan
#注意:不是每次为0的数据都需要处理,计算平均值等情况,nan不参与计算,但0参与计算

 

 

 

  


 

以上是关于Pandas的主要内容,如果未能解决你的问题,请参考以下文章

text [检查特定的数据片段]取自论文但有意思应用。 #python #pandas

Python:用于元组的 Pandas DataFrame

pandas 求两个时间差, 转化秒,判断时间差是否大于阈值

将pandas列中的列表列表转换为字符串

微信小程序代码片段

VSCode自定义代码片段——CSS选择器