【Pandas】Pandas日常工作的常用操作大全

  • Pandas的两种数据结构
  • 表格读取
  • 读取CSV或TXT文件
  • 读取Excel文件
  • 表格导出
  • 基于CSV库导出CSV
  • 基于Pandas库导出CSV、TXT
  • 表格描述信息
  • 表格访问
  • 删除
  • 修改/添加
  • 空值过滤
  • 重复值过滤


今天我们来聊聊Python中一个非常好用的数据处理工具——Pandas库。想象一下,你在工作中需要查看数据库里的信息,但这些信息不方便直接用来分析和建模。通常,我们会把这些数据先保存成CSV格式,然后再用Pandas来处理。这篇文章会教你一些Pandas的基本操作,让你轻松掌握这个强大的工具。


Pandas的两种数据结构

  Pandas主要有两种数据结构:DataFrameSeries

  · Series:类似于一维数组或列表,是由一组数据以及与之相关的数据标签(索引)构成。

  · DataFrame:类似于一个二维表格,可以看作是由多个Series按列排列构成的表格,既有行索引也有列索引。

表格读取

读取CSV或TXT文件

  有时候,读取CSVTXT文件时,可能会遇到编码错误。此时,可以尝试设置不同的编码格式。

# 读取CSV文件
df_csv = pd.read_csv('example.csv', encoding='gbk', sep='\t')
# 读取TXT文件
df_txt = pd.read_csv('example.txt', encoding='gbk', sep='\t')

读取Excel文件

  读取Excel文件时通常不需要关注编码(encoding)和分隔符(sep)的设置,因为Excel文件是二进制格式,不依赖于文本编码和分隔符来存储数据。

  Excel文件(无论是.xls还是.xlsx格式)是由单元格组成的表格数据,每个单元格可以存储不同类型的数据,包括文本、数字、日期等。Excel文件的读取和写入是通过专门的库(如openpyxlxlrdxlwt等)来完成的,这些库会处理文件内部的复杂结构。

# 读取excel
df = pd.read_excel('example.xlsx')

表格导出

基于CSV库导出CSV

  

import csv

data = [
    ['hotelid1', 'paraphrase1', 'translation1'],
    ['hotelid2', 'paraphrase2', 'translation2'],
    ['hotelid3', 'paraphrase3', 'translation3'],
    # ...
]

filename = 'data.csv'  # 文件路径和名称

with open(filename, 'w', newline='') as file:
    writer = csv.writer(file)
    # 写入表头
    writer.writerow(['hotelid', 'paraphrase', 'translation'])
    # 写入数据
    writer.writerows(data)
    file.close()

基于Pandas库导出CSV、TXT

  假设现在有个二维数组arr

arr = [
    ['Amy',2,3]
    ['John',5,6]
]

  首先要转化为df对象,然后再保存为txt

df_ = pd.DataFrame(arr)
# 不要序号 不要表头 分隔符为\t
df_.to_csv('output.txt', index=False, header=False, sep='\t')
df_.to_csv('output.csv', index=False, header=true, sep='\t')

表格描述信息

  DataFrame提供了丰富的属性和方法,用于获取数据的基本信息。一般读取文件之后,会先用以下方法预览一下表格信息。

# 读取excel
# DataFrame 的属性和方法
print(df.shape)     # 形状
print(df.columns)   # 列名
print(df.index)     # 索引
print(df.head())    # 前几行数据,默认是前 5 行
print(df.tail())    # 后几行数据,默认是后 5 行
print(df.info())    # 数据信息
print(df.describe())# 描述统计信息
print(df.mean())    # 求平均值
print(df.sum())     # 求和

表格访问

  · loc是基于标签的索引器,这意味着它接受行和列的标签(即索引名或列名)。
  · iloc是基于整数的索引器,这意味着它接受行和列的位置(即索引号)。
  · at是基于标签的单个数据访问器,速度非常快。
  · iat是基于整数位置的单个数据访问器,速度也非常快。

# 访问单列
df['列名']
df.列名
df.loc[:, '列名']
df.iloc[:, 0]

# 访问多列
df[['列名1','列名2']]
df.loc[:, ['列名1','列名2']]
df.iloc[:, 0:2]

# 访问单行
df.loc[0]
df.iloc[0]

# 访问多行
df.loc[0:2]
df.iloc[0:2]

# 访问单个元素
df.loc[0, '列名']
df.at[0, '列名']
df.iloc[1, 1]
df.iat[1, 1]

删除

# 删除行
df_new = df.drop(0)

# 使用布尔值过滤实现删除
df_new = df[df['列名'] > 2]

# 删除列
del df['列名']
df_new = df.drop('列名', axis=1)

# 重置索引
df_reset = df.reset_index(drop=True)

修改/添加

# 修改已有列/添加新列
df['列名'] = your_list

# 插入列
df.insert(1, '列名', your_list)

# 添加新行 纵向追加
df = pd.concat([df, new_rows_df], ignore_index=True)

# 添加新行 横向合并
pd.merge(df1, df2, on='列名')

空值过滤

# 过滤空值 只有这一行出现了空值就删除
df_new = df.dropna()

# 移除指定列中为空值的行
df_new = df.dropna(subset=['列名1', '列名2'])

重复值过滤

# 重复值查看 所有列重复才算重复
df.duplicated()

# 重复值查看 指定列重复才算重复
df.duplicated(subset=['列名1', '列名2'])

# 重复值删除 所有列重复才删除
df.drop_duplicates()

# 重复值删除 指定列重复才删除
df.drop_duplicates(subset=['列名1', '列名2'])