pandas模块补充和DataFrame的知识学习

pandas模块补充和DataFrame的知识学习

  • Series数据操作
  • 基本算术方法
  • DataFrame
  • 如何读取外部数据
  • 数据概览
  • 行列操作
  • 数据筛选

Series数据操作

数据准备

res=pd.Series([11,22,33,44])

增加数据

res['a']=88
res

查数据

res.loc['a']

输出88

删数据

del res[0]
res

 

算数运算符

算数符介绍

"""
add        加(add)
sub        减(substract)
div        除(divide)
mul        乘(multiple)
"""

实践与运用

sr1 = pd.Series([12,23,34])
sr3 = pd.Series([11,20,10,14])

 

s1.add(s3)

 

s1.add(s3,fill_value=0)

 

 

DataFrame

性质

表格型数据结构,相当于一个二维数组,含有一组有序的列也可以看作是由Series组成的共用一个索引的字典

构造:

1.

pd.DataFrame({'one':[1,2,3,4],'boc':[5,6,7,8]})

2.

pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3],index=['b','a','c'])})

 

3.

pd.DataFrame(np.array([[10,20],[30,40]]),index=['a','b'],columns=['c1','c2'])

4.

pd.DataFrame([np.arange(10,20),np.arange(30,40)])

"""
以上创建方式都仅仅做一个了解即可
因为工作中dataframe的数据一般都是来自于读取外部文件数据,而不是自己手动去创建
"""

 

 

常见属性

数据准备

fh=pd.DataFrame([np.arange(10,20),np.arange(30,40)])

 

行索引

fh.index

 

列索引

fh.columns

 

 转置

fh.T

 

值索引

fh.values

 

快速索引

fh.describe

 

 

读取外部数据

pd.read_csv()  # 可以读取文本文件和.csv结尾的文件数据
pd.read_excel()  # 可以读取excel表格文件数据
pd.read_sql()  # 可以读取MySQL表格数据
pd.read_html()  # 可以读取页面上table标签内所有的数据

 

文本文件读取

语法:

pd.read_csv(filepath_or_buffer, sep=',', header='infer', names=None, usecols=None, skiprows=None, skipfooter=None, converters=None, encoding=None)

参数介绍

filepath:指定txt文件或csv文件所在的具体路径 
sep:指定原数据集中各字段之间的分隔符,默认为逗号”,” 
          id name income
        1 jj 10
header:是否需要将原数据集中的第一行作为表头,默认将第一行用作字段名称 
        如果原始数据没有表头需要将该参数设置为None 
names:如果原数据集中没有字段,可以通过该参数在数据读取时给数据框添加具体的表头 
usecols:指定需要读取原数据集中的哪些变量名 
skiprows:数据读取时,指定需要跳过原数据集开头的行数
         有一些表格开头是有几行文字说明的,读取的时候应该跳过
skipfooter:数据读取时,指定需要跳过原数据集末尾的行数 
converters:用于数据类型的转换(以字典的形式指定) 
encoding:如果文件中含有中文,有时需要指定字符编码

 

基本操作

文件内容

简单读取

import pandas as pd
pd.read_csv(r'a.txt') 

复杂读取

pd.read_csv(r'a.txt',
            # 自动过滤掉完全无内容的空行(写2、3都行)
            skiprows=0,
            # 以空格为分隔符
            sep=' ',
            # 此处不指定末尾跳过行数
            skipfooter=0,
            # 针对id原本是01、02自动变成了1、2...
            converters = {'id':str},
            # 选择字符编码防止文件出现乱码
            encoding='utf-8',
            # 移除收入千分位非逗号的其他符号
            thousands='&',
            # 手动将文件表头行删除再次读取
            header=None,
            # 定义表头
            names = ['id','name','gender','salary']
           )

 

 

 

 指定读取

pd.read_csv(r'a.txt',
                    # 加上上诉部分
                    # 指定读取字段
                     usecols=['id','name'])

 

 

excel表格读取

语法:

pd.read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None,
na_values=None, thousands=None, convert_float=True)

参数介绍:

io:指定电子表格的具体路径 
sheet—name:指定需要读取电子表格中的第几个Sheet,既可以传递整数也可以传递具体的Sheet名称 
header:是否需要将数据集的第一行用作表头,默认为是需要的 
skiprows:读取数据时,指定跳过的开始行数
skip_footer:读取数据时,指定跳过的末尾行数 
index_col:指定哪些列用作数据框的行索引(标签)
na_values:指定原始数据中哪些特殊值代表了缺失值 
thousands:指定原始数据集中的千分位符 
convert_float:默认将所有的数值型字段转换为浮点型字段 
converters:通过字典的形式,指定某些列需要转换的形式

 

基本操作

文本内容

 

 

简单读取

pd.read_excel(r'a.xlsx')

 

 复杂操作

pd.read_excel(r'a.xlsx',
             # 不设置头标签
             header=None,
             # 定义头标签
             names=['ID','name','age'],
             # 定义ID数据格式
             converters={'ID':str}
             )

'''
表格的参数和文件的参数操作相类似
'''

 

 

数据库数据读取

# 在anaconda环境下,要安装pymysql模块

语法:

conn = pymysql.connect(host,port,user,password, database, charset)

参数介绍:

host:指定需要访问的MySQL服务器
port:指定访问MySQL数据库的端口号 charset:指定读取MySQL数据库的字符集,如果数据库表中含有中文,一般可以尝试将该参数设置为 “utf8”或“gbk”
user:指定访问MySQL数据库的用户名
password:指定访问MySQL数据库的密码
database:指定访问MySQL数据库的具体库名

基本操作:

数据库访问

import pymysql
newcon=pymysql.connect(
# 本机地址
host='127.0.0.1',
# 网络端口
port=3306,
# 用户名
user='root',
# 密码输入数据类型为字符
password='111',
# 进入b1数据库
database='b1',
# 字符编码
charset='utf8',
# 自动确认,可执行增删改操作
autocommit=True
)
# 读取t1表信息
pd.read_sql('select * from t1',con=newcon)

 

 关闭连结

newcon.close()

 

网页表数据读取

语法:

获取网页中的第一个列表

pd.read_html(r'https://baike.baidu.com/item/NBA%E6%80%BB%E5%86%A0%E5%86%9B/2173192?fr=aladdin')[0]

 

 

数据概览

数据准备

fh=pd.DataFrame([np.arange(10,20),np.arange(30,40),np.arange(50,60)])
fh

 

参数介绍

.columns  # 查看列 
.index      # 查看行
.shape    # 行列 
.dtypes      # 数据类型 
.head()      # 取头部多条数据
.tail()      # 取尾部多条数据

基本使用

fh.columns

# 显示头部一行
fh.head(1)

 

 

fh.dtypes

 

 

 

行列操作

 获取指定列对应的数据

语法:

df['列字段名词']

 

获取0列数据

df[0]

 

列名修改

语法:

df.rename(columns={'旧列名称':'新列名称'})

 

eg:

fg=pd.read_excel(r'a.xlsx',
             # 不设置头标签
             header=None,
             # 定义头标签
             names=['ID','name','age'],
             # 定义ID数据格式
             converters={'ID':str}
             )
print(fg)
#将age改成年龄
fg.rename(columns={'age':'nianlin'})
fg

 

 

 

 

 

 

 

 

 

创建列

语法:

df['新列名称']=内容

 

eg:

# 新增worktime列,值为2
fg['worktime']=2 fg

# start内容为age-worktime
fg['start']=fg.age-fg.worktime
fg

 

 

 

定义位置

语法:

df.insert(位置值,'新列名称',新数据)

 

eg:

在第3列后插入

fg.insert(3,'country',CN)

 

 

 

添加行

语法:

表1=表2.append(df3)

eg:

fg2=pd.DataFrame({'ID':[5],'name':['gg'],'age':23,'country':['CN'],'worktime':[2],'start':[21]})
fg2

将fg2和fg合并为fg1

fg1=fg.append(fg2)
fg1

 

删除行

1. 删除指定行

new_df = df.drop(index='行索引')
new_df = df.drop('行索引', axis='index')
new_df = df.drop('行索引', axis=0)

2. 删除指定的多行

new_df = df.drop(index=['行索引1', '行索引2'])
new_df = df.drop(['行索引1', '行索引2'], axis='index')
new_df = df.drop(['行索引1', '行索引2'], axis=0)

3. 删除指定列

new_df = df.drop(columns='列名')
new_df = df.drop('列名', axis='columns')
new_df = df.drop('列名', axis=1)

4. 删除指定的多列

new_df = df.drop(columns=['列名1', '列名2'])
new_df = df.drop(['列名1', '列名2'], axis='columns')
new_df = df.drop(['列名1', '列名2'], axis=1)

 

数据筛选

获取指定列数据

# 单列数据
fg['ID']

# 多列数据
fg[['ID','name']]

 

 获取指定行数据

数据准备

lig=pd.read_excel(r'新房子数据.xlsx'})

获取指定行数据

# 查早有电梯的
lig.loc[lig['配备电梯']=='']

 

# 获取有电梯的总价小于750的,只显示房屋名称,总价,朝向
lig.loc[(lig['配备电梯']=='')&(lig['总价'] < 750),['房屋名称','总价','房屋朝向']]

 

数据处理 

数据准备

readfile=pd.read_csv(r'a.txt',
                     # 以空格分隔
                     sep=' ',
                     # 没有表头
                     header=None,            
                    # 定义表头
                    names = ['id','name','gender','salary','year'])
readfile

更改时间格式

语法:

变量.属性= pd.to_datetime(变量.属性, format = '%Y年%m月')

eg:

readfile.year = pd.to_datetime(readfile.year, format = '%Y年%m月')
readfile

 

更改数字类型

语法:

变量.属性 = 变量.属性.str[:-1].astype(float)

eg:

readfile.salary=readfile.salary.str[:-1].astype(float)
readfile

返回目录

posted @ 2021-10-17 16:21  微纯册  阅读(105)  评论(0编辑  收藏  举报