Pandas 是一个 Python 类库,用于数据分析、数据处理、数据可视化,它具有高性能的数据结构和数据分析工具,经常与 numpy(数学计算)、scikit-learn(机器学习) 结合使用。
1. Pandas 数据读取Pandas 需要先读取表格类型的数据,然后进行分析。
| 数据类型 | 说明 | Pandas 读取方法 |
|---|---|---|
| csv、tsv、txt | 用逗号、tab分隔的纯文本文件 | pd.read_csv |
| Excel | 微软xls、xlsx文件 | pd.read_excel |
| mysql | 关系型数据库表 | pd.read_sql |
读取 csv 文件,使用 pd.read_csv 方法,使用默认的标题行、逗号分隔符。
import pandas as pd fpath = "文件路径.csv" # 读取数据,并赋给一个变量 ratings = pd.read_csv(fpath) # 在控制台打印数据 print(ratings)
'''查看csv文件特定内容的方法''' # 查看前几行数据 ratings.head() # 返回数据的行、列数 ratings.shape # 查看列名列表 ratings.columns # 查看索引列表 ratings.index # 查看每列的数据类型 ratings.dtypes1.2 读取 txt 文件
读取 txt 文件,使用 pd.read_csv 方法,自定义分隔符、列名,查看方法同 csv 文件。
创建一个 1.txt 文件(为了方便,可以使用相对路径),为这个 txt 文件写入三列数据,未定义标题行及列名,每列数据由逗号隔开,文件示意如下。
# 导入pandas库
import pandas as pd
# 导入txt文件,使用相对路径
fpath = "1.txt"
# 读取数据
pvuv = pd.read_csv(
fpath,
# sep=“ ” 自定义分隔符,若默认为逗号,可以省略
# 无标题行
header=None,
# 自定义列名
names=["name", "card number", "mark"],
)
# 在控制台打印数据
print(pvuv)
1.3 读取 Excel 文件
读取 Excel 文件,使用 pd.read_excel 方法。
创建一个 Excel1.xlsx 文件(为了方便,可以使用相对路径),为这个文件写入三列数据,第一行为列名,并默认读取第一个表单,文件示意如下。
# 导入库 import pandas as pd import xlrd # 导入Excel文件 fpath = "Excel1.xlsx" # 读取数据,默认第一个表单 p = pd.read_excel(fpath, sheet_name="1") # 在控制台打印数据,数据结构与读取的txt文件类似 print(p) ''' 使用pycharm运行这段代码时,可能会报错, 根据提示安装openpyxl库即可'''
读取 Excel 文件特定内容的方法:
'''---读取指定行的数据---''' # 默认读取前5行数据 print(p.head()) # 默认读取前2行数据 print(p.head(2)) #返回指定的行的ndarray结果 print(p.ix[[0,2,3]].values) #返回指定的行的Dataframe结果 print(p.ix[[0,2,3]]) #返回指定的index结果 print(p.index[0:5:2]) #根据index返回指定的行的ndarray结果 print(p.ix[df.index[0:5:2]].values) #根据index返回指定的行的Dataframe结果 print(p.ix[df.index[0:5:2]]) '''---读取指定列的数据---''' #只能获取单列值 print(p['name'].values) #返回指定的列的Dataframe结果 print(p.ix[:,["name","address"]]) #返回columns结果 print(list(p.columns[0:3:1])) #根据index返回指定的列的ndarray结果 print(p.ix[:,list(p.columns[1:3:1])].values) #根据index返回指定的列的Dataframe结果 print(p.ix[:,list(p.columns[1:3:1])]) '''---读取指定行和列的数据---''' #3,4行,1,2列,起始行列都为0 d = df.ix[list(p.index[3:5:1]),list(p.columns[1:3:1])]1.4 读取 mysql 数据
读取 mysql 文件,使用 pd.read_sql 方法。
import pymysql
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="12345678",
database="test",
charset="utf8",
)
mysql_page = pd.read_sql("select * from 表名", con=conn)
print(mysql_page)
2. Pandas 数据结构
2.1 Series当从一个文件中读取一块数据后,此时这个数据还是二维数据(Dataframe),并不方便我们操作,从二维数据中查找一维数据,一行或一列(Series),将二维数据降至一维数据,这样可以使我们更好地操作数据。
Dataframe:二维数据,整个列表,多行多列。
Series:一维数据,一行或一列。
Series:一种类似于一维数组的对象,它由一组数据(不同数据类型)以及一组与之相关的数据标签(索引)组成。
利用列表创建 Series:
import pandas as pd s1 = pd.Series([1, "michael", 2.5, 77]) # 左侧为索引,右侧为数据 print(s1) # 获取索引 print(s1.index) # 获取数据 print(s1.values) # 输出结果 0 1 1 michael 2 2.5 3 77 dtype: object RangeIndex(start=0, stop=4, step=1) [1 'michael' 2.5 77]
创建一个具有标签索引的 Series:
s2 = pd.Series([1, "michael", 2.5, 77], index=["a", "b", "c", "d"]) print(s2) print(s2.index) # 输出结果 a 1 b michael c 2.5 d 77 dtype: object Index(['a', 'b', 'c', 'd'], dtype='object')
使用字典创建 Series:
dict1 = {"a": 1, "b": "michael", "c": 2.5, "d": 77}
s3 = pd.Series(dict1)
print(s3)
# 输出结果
a 1
b michael
c 2.5
d 77
dtype: object
根据索引查询数据,类似于字典:
dict1 = {"a": 1, "b": "michael", "c": 2.5, "d": 77}
s3 = pd.Series(dict1)
print(s3["a"])
print(type(s3["b"]))
print(s3[["c", "d"]])
print(type(s3[["c", "d"]]))
# 输出结果
1
c 2.5
d 77
dtype: object
2.2 Dataframe
Dataframe 是一个表格型数据结构,创建方法也就是读取文件,其有三个特点:
1)每列可以是不同的值类型;
2)既有行索引 index,又有列索引 columns;
3)可以看做由 Series 组成的字典。
根据多个字典创建 Dataframe:
data = {
"state": [1, 24, 56, 100],
"year": [2008, 2012, 2021, 2022],
"name": ["li", "wang", "chen", "qin"]
}
df = pd.Dataframe(data)
print(df)
print(df.dtypes)
print(df.index)
print(df.columns)
# 输出结果
state year name
0 1 2008 li
1 24 2012 wang
2 56 2021 chen
3 100 2022 qin
state int64
year int64
name object
dtype: object
RangeIndex(start=0, stop=4, step=1)
Index(['state', 'year', 'name'], dtype='object')
2.3 从 Dataframe 中查询出 Series
如果只查询一行或一列,返回 pd.Series;
如果查询多行或多列,返回 pd.Dataframe。
查询一列或一行:
data = {
"state": [1, 24, 56, 100],
"year": [2008, 2012, 2021, 2022],
"name": ["li", "wang", "chen", "qin"]
}
df = pd.Dataframe(data)
# 查询一列
print(df["year"])
print(type(df["year"]))
# 查询一行
print(df.loc[1])
print(type(df.loc[1]))
# 输出结果
0 2008
1 2012
2 2021
3 2022
Name: year, dtype: int64
state 24
year 2012
name wang
Name: 1, dtype: object
查询多行或多列:
data = {
"state": [1, 24, 56, 100],
"year": [2008, 2012, 2021, 2022],
"name": ["li", "wang", "chen", "qin"]
}
df = pd.Dataframe(data)
# 查询多列
print(df[["year", "name"]])
print(type(df[["year", "name"]]))
# 查询多行
print(df.loc[1:3])
print(type(df.loc[1:3]))
# 输出结果
year name
0 2008 li
1 2012 wang
2 2021 chen
3 2022 qin
state year name
1 24 2012 wang
2 56 2021 chen
3 100 2022 qin



