Pandas库的主要使用方法

Zielorem

import pandas as pd

Series

Series由index和列组成,类似于一维数组(或数据库中的id与数据实体)
pandas.Series(<data>, <index>, <dtype>, <series_name>, <copy>)

  • <data>为list、tuple、dict等ndarray类型
  • <index>为数据索引标签,默认从 0 开始
  • <dtype>为所存储数据类型(默认自动判断)
  • <name>为Series名称
  • <copy>为拷贝数据,缺省为False
  • ‘Series’首字母要大写
    1
    2
    3
    4
    5
    6
    a = ['a','b','c']
    myvar = pd.Series(a)
    print(myvar)

    print(myvar[2]) # 根据索引值读取数据
    myvar = pd.Series(a, index=['x', 'y', 'z']) # 也可指定索引值

通过dict创建Series,字典的key会变为series的索引值

1
2
3
4
5
6
7
8
9
name = {1: "Alice", 2: "Bob", 3: "Cindy"}
myvar = pd.Series(name)
print(myvar)

# 若仅需dict中的部分数据,仅需指定所需数据的索引即可
myvar = pd.Series(name, index=[1, 2])

# 设置Series名称
myvar = pd.Series(myvar, name='Series_test')

DataFrame

  • DataFrame为二维表格型数据结构(存在行索引与列索引),类似于二维数组
  • 其含有一组有序的列,每列数据类型可不同
  • 类似于由一组Series组成的dict

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

  • <data>为list、tuple、dict等ndarray类型
  • <index>为数据索引标签(或行标签)
  • <columns>为列标签,缺省为 RangeIndex(0, 1, 2, …, n)
  • <dtype>为所存储数据类型(默认自动判断)
  • <copy>为拷贝数据,缺省为False
    1
    2
    3
    data = [['Alice', 10], ['Bob', 12], ['Cindy', 13]]
    df = pd.DataFrame(data, columns=['Name', 'Age']) #或index=['stu1', 'stu2']
    print(df)

使用dict配合ndarrays创建DataFrame

1
2
3
data = {'Name':['Alice', 'Bob', 'Cindy'], 'Age':[10, 12, 13]}
df = pd.DataFrame(data)
print(df)
  • ndarrays的长度需相同
  • 若传递了<index>,则<index>的长度应等于ndarray的长度
  • 若未传递<index>,则缺省下索引为range(n),其中 n 为ndarray长度

使用dict(key/value)创建DataFrame,其中dict的key为列名

1
2
3
data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print(df)

可使用loc属性返回指定行的数据,缺省下第一行索引为 0
比如第一行为df.loc[0]df.loc['stu1']
第一行及第二行为df.loc[[0, 1]]df.loc[['stu1', 'stu2']]
返回结果为一个Series数据

.csv

通过read_csv()将.csv文件转储为DataFrame数据

1
2
df = pd.read_csv('example.csv')
print(df.to_string()) #to_string()返回DataFrame数据,否则仅输出前五行与后五行

或通过to_csv()将DataFrame数据转储为.csv文件

1
2
3
4
5
6
7
8
9
10
11
12
#三个字段name, age, gender
name = ['Alice', 'Bob', 'Cindy']
age = [10, 12, 13]
gender = ['F', 'M', 'F']

#字典
dict = {'name': name, 'age': age, 'gender': gender}

df = pd.DataFrame(dict)

#保存
df.to_csv('stu.csv')
  • 通过head(n)方法读取前n行(缺省前五行)
  • 通过tail(n)方法读取后n行(缺省后五行)
  • 通过info()方法返回.csv文件基本信息(如行数、列数、各列数据类型等)
    1
    2
    3
    print(df.head()) #前五行
    print(df.tail(7)) #后七行
    print(df.info()) #.csv信息

数据处理

统计计算

  • 使用mean()方法计算列的均值
  • 使用median()方法计算列的中位数
  • 使用mode()方法计算列的众数
1
2
3
4
df = pd.read_csv('stu.csv')
avg = df['grade'].mean() #计算grade列的平均数
mid = df['grade'].median() #计算grade列的中位数
mod = df['grade'].mode() #计算grade列的众数

去除空值

DataFrame.dropna(<axis>, <how>, <thresh>, <subset>, <inplace>)

  • <axis>默认为 0,即逢空值剔除整行,若设置为 1 则表示逢空值剔除整列

  • <how>默认为’any’,即一行(或一列)中任何数据为空则剔除整行(或整列),若设置为’all’则仅当一行(或一列)中任何数据均为空时才剔除整行(或整列)

  • <thresh>设置保留整行(或整列)所需的非空值的数量阈值

  • <subset>设置需要检查的列

  • <inplace>默认为False,即返回一个新的DataFrame,不会修改原数据。若设置为True,则将计算得到的值覆盖原数据并返回None

  • 通过isnull()方法判断列(或行)中各单元格是否为空

  • 通过na_values指定空数据类型

  • 通过fillna指定特定值替换空字段

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    missing_values = ['n/a', 'na', '--'] #指定空数据范例
    df = pd.read_csv('stu.csv', na_values = missing_values)
    print(df['city'].isnull())

    new_df = df.dropna(subset=['city']) #剔除city列中字段值为空的行
    print(new_df.to_string()) #输出新DataFrame

    #指定city列中使用'null_city'替换空字段
    df['city'].fillna('null_city', inplace=True)
    print(df.to_string())

去除格式错误数据

将列中单元格统一转换为相同格式的数据

1
2
3
4
5
6
7
8
9
10
#第三个日期格式错误
data = {
'Date': ['2022/12/01', '2022/12/02', '20221203'],
'Count': [50, 40, 30]
}

df = pd.DataFrame(data, index=['day1', 'day2', 'day3'])
df['Date'] = pd.to_datetime(df['Date']) #将Date列统一转换为Datetime格式

print(df.to_string())

去除内容错误数据

对错误数据进行替换或移除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
person = {
'name': ['Alice', 'Bob', 'Cindy'],
'age': [10, 12, 1333]
}

df = pd.DataFrame(person)
df.loc[2, 'age'] = 13 #直接修改数据

#若年龄大于100则默认修改为20
for x in df.index:
if df.loc[x, 'age'] > 100:
df.loc[x, 'age'] = 20
#或df.drop(x, inplace=True)将年龄大于100的行删除

print(df.to_string())

去除重复数据

  • 通过duplicated()检测重复数据
  • 通过drop_duplicates()删除重复数据
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    person = {
    'name': ['Alice', 'Bob', 'Bob', 'Cindy'],
    'age': [10, 12, 12, 1333]
    }
    df = pd.DataFrame(person)

    print(df.duplicated()) #重复数据返回True

    df.drop_duplicates(inplace=True) #删除重复行
    print(df)
  • Title: Pandas库的主要使用方法
  • Author: Zielorem
  • Created at : 2022-10-11 14:37:29
  • Updated at : 2023-07-14 01:06:58
  • Link: https://zielorem.github.io/2022/10/11/pandas/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments