Pandas库学习与总结

Pandas 数据结构 - Series

Pandas 中的 Series 是一种类似于一维数组的数据结构,可以保存任意数据类型的元素,并且每个元素都与一个索引相关联。

  • 1. 索引

    每个 Series 对象都有一个索引,它允许我们对数据进行标记和访问。主要特点包括:

    • 自动创建索引: 如果我们没有显式地提供索引,Pandas 会自动创建一个默认的整数索引(类似于数组的索引)。

    • 多种类型的索引: 索引可以是整数、字符串、日期等各种数据类型,这使得 Series 可以适应不同类型的数据和应用场景。

    • 标签化数据访问: 索引允许我们使用标签来访问数据,而不仅仅是基于位置的整数索引。这种方式使得 Series 更加灵活和易于理解。

    2. 数据类型

    Series 可以容纳多种数据类型的元素,这些数据类型可以是:

    • 整数 (int)

    • 浮点数 (float)

    • 字符串 (str)

    • 日期时间 (datetime)

    • 布尔值 (bool)

    • Python 对象 (object):可以是任何 Python 对象,甚至是自定义的复杂对象。

 

pandas.Series( data, index, dtype, name, copy)

参数说明:

  • data:一组数据(ndarray 类型)。

  • index:数据索引标签,如果不指定,默认从 0 开始。

  • dtype:数据类型,默认会自己判断。

  • name:设置名称。

  • copy:拷贝数据,默认为 False。

#指定索引,索引值就从 0 开始
import pandas as pd
a=[1,2,3]
p=pd.Series(a)
print(p,p[1])
​
#指定索引值,根据索引值读取数据
a = ["python", "numpy", "pandas"]
p = pd.Series(a,index= ["x", "y", "z"])
print(p,p["y"])
​
#也可以使用 key/value 对象,类似字典来创建 Series,字典的 key 变成了索引值
dict1= {1: "python", 2: "numpy", 3: "pandas"}
p= pd.Series(dict1)
print(p)
      
#字典中的一部分数据,只需要指定需要数据的索引即可
dict2= {1: "python", 2: "numpy", 3: "pandas"}
p1 = pd.Series(dict2, index = [1, 2])
print(p1)   
      
#设置 Series 名称参数  
dict= {1: "python", 2: "numpy", 3: "pandas"}
p = pd.Series(dict, index = [1, 2],name="ai")
print(p)

Pandas 数据结构 - DataFrame

DDataFrame 是 Pandas 中用来处理和分析数据的重要工具,它提供了高效的数据操作和处理能力,可以轻松地进行数据清洗、转换、选择、切片和聚合等操作。对于数据分析和机器学习任务,DataFrame 是不可或缺的数据结构之一。

DataFrame 特点:

  • 二维数据结构:

    • DataFrame 是一个二维表格,由多行和多列组成。每列可以包含不同类型的数据(数值、字符串、布尔值等),每行则表示数据的一个观察结果或样本。

  • 类似字典结构:

    • DataFrame 可以被视为由多个列组成的字典。每一列可以是不同的数据类型,但它们共享一个行索引。

  • 行和列索引:

    • DataFrame 有行索引(index)和列索引(columns)。行索引用于标识每行的唯一性,列索引则用于标识每列的名称和顺序。

DataFrame 构造方法如下:

pandas.DataFrame( data, index, columns, dtype, copy)

参数说明:

  • data:一组数据(ndarray、series, map, lists, dict 等类型)。

  • index:索引值,或者可以称为行标签。

  • columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。

  • dtype:数据类型。

  • copy:拷贝数据,默认为 False。

Pandas DataFrame 是一个二维的数组结构。

#从字典创建
import pandas as pd
​
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'Los Angeles', 'Chicago']
}
​
df = pd.DataFrame(data)
​
#从列表或数组创建
data = [
    ['Alice', 25, 'New York'],
    ['Bob', 30, 'Los Angeles'],
    ['Charlie', 35, 'Chicago']
]
columns = ['Name', 'Age', 'City']
​
df = pd.DataFrame(data, columns=columns)
​

data 是一个二维列表,每个子列表表示一行数据,columns 指定了列名。

使用 loc 属性返回指定行的数据,如果没有设置索引,第一行索引为 0,第二行索引为 1,以此类推:

注意:返回结果其实就是一个 Pandas Series 数据。

import pandas as pd
data = {
    'A': [10, 20, 30],
    'B': [40, 50, 60]
}
# 数据载入到 DataFrame 对象
df = pd.DataFrame(data)
print(df.loc[0])
print(df.loc[1])
​
#返回多行数据
print(df.loc[[0, 1]])
​
#指定行索引值
df = pd.DataFrame(data, index = ["day1", "day2", "day3"])
print(df)
print(df.loc["day2"])

Pandas CSV 文件

CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

CSV 是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。

pd.read_csv(path) 读取csv文件数据

import pandas as pd
​
# 读取 CSV 文件
url = 'https://static.jyshare.com/download/nba.csv'
df = pd.read_csv(url)
​
# 显示前几行数据
print(df.head())
​

pd.to_csv() 将DataFrame 存储为 csv 文件:

import pandas as pd
​
data = {
    'Name': ['LeBron James', 'Stephen Curry', 'Kevin Durant'],
    'Team': ['Lakers', 'Warriors', 'Nets'],
    'Points': [27.0, 24.2, 26.0]
}
df = pd.DataFrame(data)
​
# 将 DataFrame 保存为 CSV 文件
df.to_csv('nba_players.csv', index=False)
​

数据处理

1、head()

head( n ) 方法用于读取前面的 n 行,如果不填参数 n ,默认返回 5 行。

读取前面 5 行

 #读取前面 5 行
import pandas as pd
df = pd.read_csv('nba.csv')
print(df.head())
​
#读取前面 10 行
print(df.head(10))

2、tail()

tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN

#读取末尾 5 行
import pandas as pd
df = pd.read_csv('nba.csv')
print(df.tail())
​
# 读取末尾 10 行
print(df.tail(10))

3、info()

info() 方法返回表格的一些基本信息:

import pandas as pd
df = pd.read_csv('nba.csv')
print(df.info())

输出结果为:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 458 entries, 0 to 457          # 行数,458 行,第一行编号为 0
Data columns (total 9 columns):            # 列数,9列
 #   Column    Non-Null Count  Dtype       # 各列的数据类型
---  ------    --------------  -----  
 0   Name      457 non-null    object 
 1   Team      457 non-null    object 
 2   Number    457 non-null    float64
 3   Position  457 non-null    object 
 4   Age       457 non-null    float64
 5   Height    457 non-null    object 
 6   Weight    457 non-null    float64
 7   College   373 non-null    object         # non-null,意思为非空的数据    
 8   Salary    446 non-null    float64
dtypes: float64(4), object(5)                 # 类型
​

non-null 为非空数据,我们可以看到上面的信息中,总共 458 行,College 字段的空值最多。

Pandas JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以易于人类阅读和编写的文本格式存储和交换数据,并且易于机器解析和生成。JSON 的主要优势在于其简洁性和灵活性,通常用于传输数据、配置文件以及存储结构化数据。

JSON 的基本结构

JSON 数据结构包括以下几个基本元素:

  1. 对象(Object):由一组键值对组成。键(键名)是字符串,值可以是字符串、数字、布尔值、数组、对象或 null。对象用花括号 {} 括起来。

    jsonCopy Code{
        "name": "John",
        "age": 30,
        "isStudent": false
    }
  2. 数组(Array):由一组值组成,值可以是字符串、数字、布尔值、对象、数组或 null。数组用方括号 [] 括起来。

    jsonCopy Code[
        "apple",
        "banana",
        "cherry"
    ]
  3. 值(Value):可以是字符串(用双引号括起来)、数字(整数或浮点数)、布尔值(truefalse)、对象、数组或 null

使用 JSON 在 Python 中

Python 中可以使用 json 模块来处理 JSON 数据。以下是如何在 Python 中读取和写入 JSON 数据的示例:

读取 JSON 文件

假设你有一个 JSON 文件 data.json,内容如下:

jsonCopy Code{
    "name": "John",
    "age": 30,
    "isStudent": false,
    "courses": ["Math", "Science"],
    "address": {
        "city": "New York",
        "state": "NY"
    }
}

你可以使用以下代码读取 JSON 文件:

pythonCopy Codeimport json
​
# 读取 JSON 文件
with open('data.json', 'r') as file:
    data = json.load(file)
​
# 显示读取的数据
print(data)
写入 JSON 文件

你可以将一个 Python 对象(如字典)写入 JSON 文件:

pythonCopy Codeimport json
​
# 创建一个示例数据字典
data = {
    "name": "Alice",
    "age": 25,
    "isStudent": True,
    "courses": ["Biology", "Chemistry"],
    "address": {
        "city": "Los Angeles",
        "state": "CA"
    }
}
​
# 读取 JSON 转为 DataFrame  
df = pd.DataFrame(data)
print(df)

Pandas 数据清洗

数据清洗是对一些没有用的数据进行处理的过程。

很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要使数据分析更加准确,就需要对这些没有用的数据进行处理。

使用到的测试数据 property-data.csv 如下:

上表包含了四种空数据:

  • n/a

  • NA

  • na


1、Pandas 清洗空值

import pandas as pd
import numpy as np
​
# 创建一个示例 DataFrame
data = {
    'A': [1, np.nan, 3],
    'B': [4, 5, np.nan],
    'C': [7, 8, 9]
}
df = pd.DataFrame(data)
​
# 判断各个单元格是否为空
null_mask = df.isnull()
print(null_mask)
​
​
#1. 删除空值
#删除包含空值的行
df_cleaned_rows = df.dropna()  # 删除包含空值的行
#删除包含空值的列
df_cleaned_cols = df.dropna(axis=1)  # 删除包含空值的列
​
#2.填充空值
#使用常量填充
df_filled = df.fillna(value=0)  # 用 0 填充空值
#使用均值填充
df_filled_ffill = df.fillna(method='ffill')  # 向前填充
#向前填充(用前一个值填充)
df_filled_ffill = df.fillna(method='ffill')  # 向前填充
#向后填充(用下一个值填充)
df_filled_bfill = df.fillna(method='bfill')  # 向后填充
​
#3。统计空值数量
#统计每列的空值数量
null_counts = df.isnull().sum()
print(null_counts)
#统计每行的空值数量
null_counts_rows = df.isnull().sum(axis=1)
print(null_counts_rows)
​

2、Pandas 清洗格式错误日期

pd.to_datetime()格式化日期:

import pandas as pd
​
df = pd.DataFrame({
    'date': ['2024-08-09', '08/09/2024', '2024.08.09']
})
​
df['parsed_date'] = pd.to_datetime(df['date'])
​
print(df)
​

3、Pandas 清洗错误数据

#替换错误年龄的数据
import pandas as pd
import numpy as np
​
# 示例 DataFrame
data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, -5, 150, 30, 200]
}
​
df = pd.DataFrame(data)
​
# 定义合理的年龄范围
min_age = 0
max_age = 120
​
# 替换错误的年龄数据为 NaN
df['age'] = df['age'].apply(lambda x: x if min_age <= x <= max_age else np.nan)
​
# 用均值填充 NaN
df['age'].fillna(df['age'].mean(), inplace=True)
​
print(df)
​

4、Pandas 清洗重复数据

如果我们要清洗重复数据,可以使用 duplicated()drop_duplicates() 方法。

如果对应的数据是重复的,duplicated() 会返回 True,否则返回 False。

import pandas as pd
person = {
  "name": ['python', 'numpy' , 'numpy' , 'pandas'],
  "age": [50, 40, 40, 23]  
}
df = pd.DataFrame(person)
print(df.duplicated())

删除重复数据,可以直接使用drop_duplicates() 方法。

import pandas as pd
persons = {
  "name": ['Google', 'Runoob', 'Runoob', 'Taobao'],
  "age": [50, 40, 40, 23]  
}
df = pd.DataFrame(persons)
df.drop_duplicates(inplace = True)
print(df)

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值