前言

pandas库常常用于文件读取与写入,也可以进行一些数据处理。

本文将介绍pandas库的常用函数,使用data.csv进行演示,文件内容如下图:

输入部分

引入头文件

import pandas as pd
import os

读取 csv 文件

df=pd.read_csv('data.csv')

此时data.csv可以通过df调用

打印出来看看结果:

print(df)

获得列

以下两种方法均不会读取第一行

用列名

utctime=df["datetime"]

这样会根据列名读取对应的列

用索引

utctime1=df.iloc[:,0]

注意,索引是从 0 开始的,也就是说代码中的 0 代表实际中的第一列

获得行

用标签

这里仅作参考:

row3=df.loc["Name3"]

用索引

row3=df.iloc[2]

注意,这里的行数,是从第二行开始算的。

数据清洗与处理

处理缺失值

# 检测缺失值
print(df.isnull().sum())  # 每列缺失值数量
print(df.isna().any())    # 是否有缺失值

# 处理缺失值
df_clean = df.dropna()              # 删除含缺失值的行
df_filled = df.fillna(0)            # 用 0 填充
df_filled = df.fillna(df.mean())    # 用均值填充
df_forward = df.fillna(method='ffill')  # 前向填充

这里的缺失值处理常常需要手动处理,而非简单调用

数据类型转换

# 转换数据类型
df['date'] = pd.to_datetime(df['date'])
df['category'] = df['category'].astype('category')
df['price'] = df['price'].astype(float)
# 处理重复值
df_unique = df.drop_duplicates()
df_unique = df.drop_duplicates(subset=['id'])  # 基于特定列去重

数据筛选

条件筛选

# 单条件筛选
filtered = df[df['age'] > 25]

# 多条件筛选
filtered = df[(df['age'] > 25) & (df['salary'] < 50000)]
filtered = df[(df['city'] == '北京') | (df['city'] == '上海')]

# 使用 query 方法(更简洁)
filtered = df.query('age > 25 and salary < 50000')
filtered = df.query('city in ["北京", "上海"]')

字符串查找

# 字符串筛选
df[df['name'].str.contains('张')]
df[df['email'].str.endswith('@gmail.com')]

数据写入

创建 dateframe

list1 = [1, 2, 3, 4, 5]
list2 = ['a', 'b', 'c', 'd', 'e']
list3 = [10.5, 20.3, 30.1, 40.7, 50.9]
# 直接创建 DataFrame
df = pd.DataFrame({
    '列 1 名称': list1,
    '列 2 名称': list2,
    '列 3 名称': list3
})

写入

覆盖写入

df.to_csv('my_data.csv', index=False, encoding='utf-8-sig')

追加写入

较为麻烦,所以封装成一个函数供调用:

def append_to_csv(df, filename):
    file_exists = os.path.exists(filename)
    df.to_csv(filename,
              mode='a' if file_exists else 'w',
              index=False,
              header=not file_exists,
              encoding='utf-8-sig')

只需要:

append_to_csv(df, filename)

即可追加写入