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 pd
1. 创建一个简单的 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"]) # Runoob
3.使用 key/value 对象,类似字典来创建 Series
sites = {1: "Google", 2: "Runoob", 3: "Wiki"} # dtype: object
myvar = pd.Series(sites)
print(myvar) # 1 Google 2 Runoob 3 Wiki
4. 只需要字典中的一部分数据,只需要指定需要数据的索引即可
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 object
2 Team 51 non-null object
3 Number 51 non-null int64
4 Position 51 non-null object
5 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')
文章来源:https://www.toymoban.com/news/detail-647444.html
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_csv
return _read(filepath_or_buffer, kwds)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\pycharm\venv\Lib\site-packages\pandas\io\parsers\readers.py", line 577, in _read
parser = 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_engine
return 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] 菜鸟教程文章来源地址https://www.toymoban.com/news/detail-647444.html
到了这里,关于Python第三方库 - Pandas库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!