【Pandas】Pandas日常工作的常用操作大全
【Pandas】Pandas日常工作的常用操作大全
- Pandas的两种数据结构
- 表格读取
- 读取CSV或TXT文件
- 读取Excel文件
- 表格导出
- 基于CSV库导出CSV
- 基于Pandas库导出CSV、TXT
- 表格描述信息
- 表格访问
- 删除
- 修改/添加
- 空值过滤
- 重复值过滤
今天我们来聊聊Python中一个非常好用的数据处理工具——Pandas库。想象一下,你在工作中需要查看数据库里的信息,但这些信息不方便直接用来分析和建模。通常,我们会把这些数据先保存成CSV格式,然后再用Pandas来处理。这篇文章会教你一些Pandas的基本操作,让你轻松掌握这个强大的工具。
Pandas的两种数据结构
Pandas
主要有两种数据结构:DataFrame
和Series
。
· Series
:类似于一维数组或列表,是由一组数据以及与之相关的数据标签(索引)构成。
· DataFrame
:类似于一个二维表格,可以看作是由多个Series
按列排列构成的表格,既有行索引也有列索引。
表格读取
读取CSV或TXT文件
有时候,读取CSV
或TXT
文件时,可能会遇到编码错误。此时,可以尝试设置不同的编码格式。
# 读取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
文件的读取和写入是通过专门的库(如openpyxl
、xlrd
、xlwt
等)来完成的,这些库会处理文件内部的复杂结构。
# 读取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'])