python基础 | Pandas基础
pandas系列 read_csv 与 to_csv 方法各参数详解(全,中文版)
Pandas–read_csv,to_csv参数说明
read_csv
:把CSV文件读取为一个DataFrame对象
filepath_or_buffer
:要读取的CSV文件的路径或文件对象。sep
:指定用于分隔字段的字符,默认为逗号(,)。header
:指定作为列名的行号,默认为0,表示第一行。index_col
:指定作为索引的列号或列名,默认为None,即不使用任何列作为索引。na_values
:指定在CSV文件中应被解释为缺失值的值。dtype
:指定每列的数据类型,可以使用字典来分别指定每列的数据类型。nrows
:指定读取的行数。skiprows
:指定跳过的行数。encoding
:指定文件编码。to_csv
:将DataFrame对象写入到CSV文件中
path_or_buf
:要写入的CSV文件的路径或文件对象。sep
:指定用于分隔字段的字符,默认为逗号(,)。header
:指定是否包含列名,默认为True。index
:指定是否包含行索引,默认为True。mode
:指定写入模式,默认为’w’,覆盖已存在的文件;若设为’a’,则追加数据到已存在的文件。encoding
:指定文件编码。Pandas.DataFrame.loc函数用法大全
DataFrame.loc[row_indexer, column_indexer]
:其中 row_indexer和 column_indexer可以是单个标签、标签列表、标签切片、布尔数组或可返回这些对象之一的可调用函数。
# 选择行为'Alice',列为'Age'和'City'
df.loc['Alice', ['Age', 'City']]
# 选择标签为'Alice'到'Charlie'的行,所有列
df.loc['Alice':'Charlie', :]
# 选择标签为'Alice'到'Charlie'的行,列为'Age'到'City'
df.loc['Alice':'Charlie', 'Age':'City']
# 选择年龄大于等于30的行,所有列
df.loc[df['Age'] >= 30, :]
# 选择年龄大于等于30的行,列为'Name'和'Age'
df.loc[df['Age'] >= 30, ['Name', 'Age']]
# 定义一个函数,选择名字长度大于5的行,所有列
def name_length(row):
return len(row['Name']) > 5
df.loc[name_length, :]
【很详细的一篇博客!】Pandas数据清洗系列:DataFrame.sample方法详解
DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
n
:要抽样的行数。frac
:要抽样的行百分比。replace
:是否允许重复抽样,默认为False。weights
:每行的抽样权重,可以是一个列名或值的Series。random_state
:用于确定随机种子的整数或RandomState对象,以确保可重复的随机抽样。axis
:0表示抽样行,1表示抽样列。# 从DataFrame中随机选择3行
df.sample(n=3)
# 从DataFrame中随机选择20%的行
df.sample(frac=0.2)
# 从DataFrame中选取3行,并允许重复抽样
df.sample(n=3, replace=True)
# 为每行设置不同的抽样权重,并从DataFrame中随机选择1行
weights = pd.Series([0.1, 0.3, 0.6], index=df.index)
df.sample(n=1, weights=weights)
Pandas删除缺失数据函数–dropna
DataFrame.dropna(axis=0, how='any', inplace=False)
axis
:指定删除的轴,axis=0表示删除包含缺失值的行(默认),axis=1表示删除包含缺失值的列。how
:指定删除的条件,默认为’any’,表示如果有任何一个元素为空,则删除该行或列;如果设置为’all’,则要求整行或整列都为空时才删除。inplace
:指定是否在原地更改DataFrame,默认为 False,表示创建一个新的DataFrame返回,不影响原始DataFrame。Python 列表 append()函数使用详解
DataFrame.append(other, ignore_index=False, verify_integrity=False)
other
:要追加的对象,可以是DataFrame、Series、字典(由Series组成)等。ignore_index
:是否忽略索引,默认为 False。如果设置为 True,则添加行时会生成新的连续整数索引。verify_integrity
:是否验证DataFrame中的索引,并引发异常,默认为 False。如果设置为 True,并且追加操作会导致索引冲突,则会引发异常。python——当groupby遇到匿名函数
DataFrame.groupby(by=None, axis=0, level=None, as_index=True)
by
:指定用于分组的列或多个列,可以是列名、列标签列表或字典等。axis
:指定分组的轴,默认为0,表示按行进行分组;设置为1则按列进行分组。level
:对于具有多层级索引的数据,通过指定 level可以按指定层级的索引进行分组,默认为 None。as_index
:指定是否将分组的列作为新索引,默认为 True,即将分组的列作为索引;设置为 False则不进行该操作。grouped_data = df.groupby('category')['price'].apply(lambda x: x.mean())
reset_index(drop=True, inplace=True)
是对DataFrame对象进行操作的一个方法。它的主要作用是重置索引并将索引设置为连续的整数,并可选择是否在原地更改DataFrame。
由于某些操作(例如分组、筛选、采样等)可能会导致DataFrame的索引出现乱序或不连续的情况,reset_index()可以帮助我们重新构建索引,确保其按照连续的整数值排列。
假设有以下DataFrame
index A B
0 0 1 4.0
1 2 2 5.0
2 3 3 6.0
执行后为
A B
0 1 4.0
1 2 5.0
2 3 6.0
from_level = “一般节点”
traffic !=0
加权采样:to_level的值为一般节点与网络核心的权重之比为 1 : 5
分层采样:根据to_level的值进行分层采样
随机采样,以上各采样50条
import pandas as pd
# 读取数据集
data = pd.read_csv('test.csv')
# 删除空行(所有列均为空)
data.dropna(how='all', inplace=True)
# 数据过滤,只保留了'from_level'列值为"一般节点"且'traffic'列值不等于0的行
filtered_df = data.loc[(data['from_level'] == "一般节点") & (data['traffic'] != 0)]
filtered_df.to_csv('filtered_data.csv', index=False, encoding='utf-8')
# 加权采样,一般节点被赋予1的权重,网络核心被赋予5的权重
weighted_ratios = {'一般节点': 1, '网络核心': 5}
sample_data = pd.DataFrame()
for level, ratio in weighted_ratios.items():
level_data = data[data['to_level'] == level]
level_sample = level_data.sample(int(50 * ratio / sum(weighted_ratios.values())), random_state=42)
sample_data = sample_data.append(level_sample)
sample_data.to_csv('weighted_sample.csv', index=False, encoding='utf-8')
# 分层采样,采样数量根据每个分组的数量与整个数据集的比例计算得出
stratified_sample = data.groupby('to_level').apply(lambda x: x.sample(n=round(50*len(x)/len(data)), replace=False, random_state=42))
stratified_sample.reset_index(drop=True, inplace=True)
stratified_sample.to_csv('stratified_sample.csv', index=False, encoding='utf-8')
# 随机采样
random_sample = data.sample(n=50, replace=False, random_state=42)
random_sample.to_csv('random_sample.csv', index=False, encoding='utf-8')