Pandas模块与Dataframe

2021/10/17 23:10:48

本文主要是介绍Pandas模块与Dataframe,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Series数据操作:

1 res = pd.Series([111,222,333,444])
2 # 增
3 res['a'] = 123
4 # 查
5 res.loc[1]
6 # 改
7 res[0] = 1
8 # 删
9 del res[0]

 

 

 

 

 

 

 

 

算术运算符:

1 """
2 add        加(add)
3 sub        减(substract)
4 div        除(divide)
5 mul        乘(multiple)
6 """
7 sr1 = pd.Series([12,23,34], index=['c','a','d'])
8 sr3 = pd.Series([11,20,10,14], index=['d','c','a','b'])
9 sr1.add(sr3,fill_value=0)

DataFrame创建方式:

 1 表格型数据结构,相当于一个二维数组,含有一组有序的列也可以看作是由Series组成的共用一个索引的字典
 2 
 3 第一种:
 4 res = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
 5 第二种:
 6 pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3],index=['b','a','c'])})
 7 第三种:
 8 pd.DataFrame(np.array([[10,20],[30,40]]),index=['a','b'],columns=['c1','c2'])
 9 更多
10 pd.DataFrame([np.arange(1,8),np.arange(11,18)])
11 s1 = pd.Series(np.arange(1,9,2))
12 s2 = pd.Series(np.arange(2,10,2))
13 s3 = pd.Series(np.arange(5,7),index=[1,2])
14 df5 = pd.DataFrame({'c1':s1,'c2':s2,'c3':s3})
"""
以上创建方式都仅仅做一个了解即可
因为工作中dataframe的数据一般都是来自于读取外部文件数据,而不是自己手动去创建
"""

常见属性:

1.index 行索引
2.columns 列索引
3.T 转置
4.values 值索引
5.describe 快速统计

DataFrame数据类型补充:

# 在DataFrame中所有的字符类型数据在查看数据类型的时候都表示成object

读取外部数据:

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

基本使用:

 1 import pandas as pd
 2 data01 = pd.read_csv(r'data_test01.txt',
 3     skiprows = 2, # python能自动过滤掉完全无内容的空行(写2、3都行)
 4     sep = ',', # 默认就是逗号 写不写都行
 5     skipfooter = 3,
 6     )
 7 # 1.针对id原本是01、02自动变成了1、2...
 8 converters = {'id':str}
 9 # 2.点击文件另存修改文件编码之后再次读取出现乱码
10 encoding='utf-8'
11 # 3.移除收入千分位非逗号的其他符号
12 thousands = '&'
13 # 4.手动将文件表头行删除再次读取
14 header = None # 默认用索引
15 names = ['id','year','month','day','gender','occupation','income']
16 # 5.指定读取的字段
17 usecols = ['id','income']

"""
查看方法帮助
方式1
  方法名?
方式2
  光标停留在方法名左括号后面
  先按住shift键不松开,再按tab键(没反应就多按几次)
"""

excel表格读取:

 1 pd.read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None,
 2 na_values=None, thousands=None, convert_float=True)
 3 
 4 io:指定电子表格的具体路径 
 5 sheet—name:指定需要读取电子表格中的第几个Sheet,既可以传递整数也可以传递具体的Sheet名称 
 6 header:是否需要将数据集的第一行用作表头,默认为是需要的 
 7 skiprows:读取数据时,指定跳过的开始行数
 8 skip_footer:读取数据时,指定跳过的末尾行数 
 9 index_col:指定哪些列用作数据框的行索引(标签)
10 na_values:指定原始数据中哪些特殊值代表了缺失值 
11 thousands:指定原始数据集中的千分位符 
12 convert_float:默认将所有的数值型字段转换为浮点型字段 
13 converters:通过字典的形式,指定某些列需要转换的形式
14 
15 pd.read_excel(r'data_test02.xlsx',
16              header = None,
17               names = ['ID','Product','Color','Size'], 
18              converters = {'ID':str}
19              )

数据库数据读取:

# 在anaconda环境下直接安装
# pymysql模块

 1 import pymysql
 2 conn = pymysql.connect(host,port,user,password, database, charset)
 3 
 4 host:指定需要访问的MySQL服务器
 5 port:指定访问MySQL数据库的端口号 charset:指定读取MySQL数据库的字符集,如果数据库表中含有中文,一般可以尝试将该参数设置为 “utf8”或“gbk”
 6 user:指定访问MySQL数据库的用户名
 7 password:指定访问MySQL数据库的密码
 8 database:指定访问MySQL数据库的具体库名
 9   
10 # 利用pymysql创建好链接MySQL的链接之后即可通过该链接操作MySQL
11 pd.read_sql('select * from user', con = conn)
12 conn.close()  # 关闭链接

网页表格数据读取:

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

数据概览:

1 df.columns  # 查看列 
2 df.index      # 查看行
3 df.shape    # 行列 
4 df.dtypes      # 数据类型 
5 df.head()      # 取头部多条数据
6 df.tail()      # 取尾部多条数据

行列操作:

 1 df['列字段名词']  # 获取指定列对应的数据
 2 
 3 df.rename(column={'旧列名称':'新列名称'})
 4 
 5 # 创建新的列
 6 df['新列名称']=df.列名称/(df.列名称1+df.列名称2)
 7 
 8 # 自定义位置
 9 df.insert(3,'新列名称',新数据)
10 
11 # 添加行
12 df3 = df1.append(df2)

数据筛选:

 1 # 获取指定列数据
 2 df['列名']  # 单列数据
 3 df[['列名1','列名2',...]]  # 多列数据
 4 
 5 # 获取指定行数据
 6 sec_buildings.loc[sec_buildings["region"] == '浦东']
 7 
 8 sec_buildings.loc[(sec_buildings["region"] == '浦东') & (sec_buildings['size'] > 150),]
 9 
10 sec_buildings.loc[(sec_buildings["region"] == '浦东') & (sec_buildings['size'] > 150),['name','tot_amt','price_unit']]

数据处理:

1 sec_car = pd.read_csv(r'sec_cars.csv')
2 sec_car.head()
3 sec_car.dtypes
4 sec_car.Boarding_time = pd.to_datetime(sec_car.Boarding_time, format = '%Y年%m月')
5 
6 sec_car.New_price = sec_car.New_price.str[:-1].astype(float)

 



这篇关于Pandas模块与Dataframe的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程