文章目录
- 1. Pandas介绍
- 2. Pandas基础
- 2.1 引入
- 2.2 数据结构
- 2.2.1 Series
- 2.3 DataFrame
- 2.3.1 概念
- 3 Pandas - CSV 文件
- 3.1 语法
- 3.2 遇到的问题
- 4 Pandas - JSON
- 4.1 语法
- 参考文档
1. Pandas介绍
概念:
Pandas
是Python
的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas
的目标是成为Python
数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。经过多年不懈的努力,Pandas
离这个目标已经越来越近了。
2. Pandas基础
2.1 引入
# 引入pandas
import pandas as pd
2.2 数据结构
2.2.1 Series
Pandas Series
类似表格中的一个列(column)
,类似于一维数组,可以保存任何数据类型。
Series
由索引(index)
和列组成,函数如下:
pandas.Series( data, index, dtype, name, copy)
参数 | 解释 |
---|---|
data | 一组数据( ndarray 类型) |
index | 数据索引标签,如果不指定,默认从 0 开始 |
dtype | 数据类型,默认会自己判断 |
name | 设置名称 |
copy | 拷贝数据,默认为 False |
举例:
import pandas as pd1. 创建一个简单的 Series
a = [1, 2, 3] # dtype: int64
myvar = pd.Series(a)
print(myvar)
print(myvar[1]) # 输出索引为1的数值2. 指定索引的方式
a = ["Google", "Runoob", "Wiki"]
myvar = pd.Series(a, index = ["x", "y", "z"]) # dtype: object
print(myvar) # x Google y Runoob z Wiki
print(myvar["y"]) # Runoob3.使用 key/value 对象,类似字典来创建 Series
sites = {1: "Google", 2: "Runoob", 3: "Wiki"} # dtype: object
myvar = pd.Series(sites)
print(myvar) # 1 Google 2 Runoob 3 Wiki4. 只需要字典中的一部分数据,只需要指定需要数据的索引即可
sites = {1: "Google", 2: "Runoob", 3: "Wiki"}
myvar = pd.Series(sites, index = [1, 2])
print(myvar) # 1 Google 2 Runoob (就指定了索引为1和2的数据)
下图只针对例1进行的截图
2.3 DataFrame
2.3.1 概念
DataFrame
是pandas
库中的一个数据结构,用于存储和操作二维数据。它可以看作是由多个Series
组成的表格,其中每个Series
代表一列数据。有几种方法可以构造一个DataFrame
对象。
一种方法是使用DataFrame的构造函数,可以通过传入一个二维的数据数组、行索引、列索引、数据类型等参数来创建一个DataFrame
对象。构造函数的具体用法如下columns=None, dtype=None, copy=False
其中:
data
参数是一个二维的数据数组,可以是一个列表、字典或其他数据结构index
参数是行索引,可以是一个列表或其他可迭代对象columns
参数是列索引,也可以是一个列表或其他可迭代对象dtyp
参数是数据类型,用于指定每列的数据类型copy
参数用于指定是否复制数据。
3 Pandas - CSV 文件
CSV(Comma-Separated Values
,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
CSV
是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。
3.1 语法
- 读取
csv
import pandas as pd
df = pd.read_csv('test.csv') # 方式一
df = pd.read_csv('test.csv', engine='python') #方式二
print(df)
- 数据输出
to_string()
用于返回DataFrame
类型的数据,如果不使用该函数,则输出结果为数据的前面5
行和末尾5
行,中间部分以 … 代替。
print(df) # 0 0 Peter Parker Boston Celtics 0 ... 25 62 100 3000
print(df.to_string()) # 0 0 Peter Parker Boston Celtics 0 PG 25 62 100 3000
- 数据储存
使用
to_csv()
方法将DataFrame
存储为csv
文件
nme = ["Google", "Runoob", "Taobao", "Wiki"]
st = ["www.google.com", "www.runoob.com", "www.taobao.com", "www.wikipedia.org"]
ag = [90, 40, 80, 98]
# 字典
dict = {'name': nme, 'site': st, 'age': ag}
df = pd.DataFrame(dict)
# 保存 dataframe
df.to_csv('1.csv')
4. 数据处理 - 读取前几行
head( n )
方法用于读取前面的n
行,如果不填参数n
,默认返回5
行
import pandas as pd
df = pd.read_csv('test.csv', engine='python')
print(df.head()) # 默认读取前5行
print('-----------------------')
print(df.head(10)) # 读取前10行
- 数据处理 - 读取末尾几行
tail( n )
方法用于读取尾部的n
行,如果不填参数n
,默认返回5
行,空行各个字段的值返回NaN
import pandas as pd
df = pd.read_csv('test.csv', engine='python')
print(df.tail()) # 默认末尾5行
print('-----------------------')
print(df.tail(10)) # 读取末尾10行
- 返回表格基本信息
info()
方法返回表格的一些基本信息
import pandas as pd
df = pd.read_csv('test.csv', engine='python')
print(df.info())输出结果如下:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 51 entries, 0 to 50 # 51行 编号0-50 类似于数组index
Data columns (total 9 columns): # 9列数据# Column Non-Null Count Dtype # 各列的数据类型
--- ------ -------------- ----- 0 No 51 non-null int64 1 Name 51 non-null object2 Team 51 non-null object3 Number 51 non-null int64 4 Position 51 non-null object5 Age 51 non-null int64 6 Height 51 non-null int64 7 Weight 51 non-null int64 8 Salary 51 non-null int64
dtypes: int64(6), object(3) # 类型
3.2 遇到的问题
读取csv
出现了报错,如下:
在
read_csv()
的参数中加入engine = "python"
即可
pd.read_csv('my.csv', engine='python')
Traceback (most recent call last):File "D:\pycharm\test.py", line 2, in <module>df = pd.read_csv('my.csv')^^^^^^^^^^^^^^^^^^^^^File "D:\pycharm\venv\Lib\site-packages\pandas\io\parsers\readers.py", line 912, in read_csvreturn _read(filepath_or_buffer, kwds)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\pycharm\venv\Lib\site-packages\pandas\io\parsers\readers.py", line 577, in _readparser = TextFileReader(filepath_or_buffer, **kwds)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\pycharm\venv\Lib\site-packages\pandas\io\parsers\readers.py", line 1407, in __init__self._engine = self._make_engine(f, self.engine)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\pycharm\venv\Lib\site-packages\pandas\io\parsers\readers.py", line 1679, in _make_enginereturn mapping[engine](f, **self.options)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\pycharm\venv\Lib\site-packages\pandas\io\parsers\c_parser_wrapper.py", line 93, in __init__self._reader = parsers.TextReader(src, **kwds)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "pandas\_libs\parsers.pyx", line 557, in pandas._libs.parsers.TextReader.__cinit__
pandas.errors.EmptyDataError: No columns to parse from file
4 Pandas - JSON
4.1 语法
- 读取
json
文件
# test.json
[{"id": "S001","name": "Lisa","age": 18,"hobby": "sing and dance"},{"id": "S002","name": "Rose","age": 17,"hobby": "draw pictures"},{"id": "S003","name": Jack"","age": 18,"likes": "play basketball"}
]import pandas as pd
df = pd.read_json('test.json')
print(df.to_string())
print('-----------------------')
print(df)# 输出相同 拿其中一个举例id name age hobby
0 S001 Lisa 18 sing and dance
1 S002 Rose 17 draw pictures
2 S003 Jack 18 play basketball
- 处理
json
数据
import pandas as pd
data = [{"id": "S001","name": "Lisa","age": 18,"hobby": "sing and dance"},{"id": "S002","name": "Rose","age": 17,"hobby": "draw pictures"},{"id": "S003","name": "Jack","age": 18,"hobby": "play basketball"}
]
df = pd.DataFrame(data)
print(df)
- 内嵌的
json
数据
import pandas as pd
data = [{"id": "S001","name": "Lisa","age": 18,"hobby": [{"mostlike" : "read books","morelike" : "sing","like" : "dance"}]},{"id": "S002","name": "Rose","age": 17,"hobby": "draw pictures"},{"id": "S003","name": "Jack","age": 18,"hobby": "play basketball"}
]
df = pd.DataFrame(data)
print(df)# 输出id name age hobby
0 S001 Lisa 18 [{'mostlike': 'read books', 'morelike': 'sing'...
1 S002 Rose 17 draw pictures
2 S003 Jack 18 play basketball
- 内嵌数据完整 解析
需要遇到一个方法: json_normalize()test.json
[{"id": "S001","name": "Lisa","age": 18,"hobby": [{"mostlike" : "read books","morelike" : "sing","like" : "dance"}]},{"id": "S002","name": "Rose","age": 17,"hobby": [{"mostlike" : "draw","morelike" : "calligraphy","like" : "mountain climbing"}]},{"id": "S003","name": "Jack","age": 18,"hobby": [{"mostlike" : "play basketball","morelike" : "play volleyball","like" : "play football"}]}
]import pandas as pd
import json# 使用 Python JSON 模块载入数据
with open('test.json','r') as f:data = json.loads(f.read())# 展平内嵌数据
df_nested_list = pd.json_normalize(data, record_path =['hobby'])
print(df_nested_list)输出:mostlike morelike like
0 read books sing dance
1 draw calligraphy mountain climbing
2 play basketball play volleyball play football# 展平全部数据 用 meta 这个参数
df_nested_list = pd.json_normalize(data,record_path =['hobby'],meta=['id', 'name' , 'age']
)
print(df_nested_list)输出:mostlike morelike like id name age
0 read books sing dance S001 Lisa 18
1 draw calligraphy mountain climbing S002 Rose 17
2 play basketball play volleyball play football S003 Jack 18
参考文档
[1] Pandas教程
[2] 菜鸟教程