Python中Dataframe使用大集合(更新ing)

 能搜到这篇博文的,说明对Dataframe还是有一定了解的,这里就不过多文字介绍,直接上干货!!! 

目录

 导包

一、文件读取为Dataframe

1. 读取CSV文件

2. 读取Excel文件

二、创建Dataframe 

1. 创建空的Dataframe带列名

 2. 创建有数据的Dataframe

三、关于NaN(空缺值)的处理

1. 使用固定值填充

2.  使用前一个或后一个有效值填充

3. 使用插值方法填充

4. 使用平均值或中位数填充

 四、删除重复行drop_duplicates

1. 删除完全重复行

2. 根据特定多列值重复,删除重复行

五、删除行/列

1. 删除行

 2. 删除列

 六、表连接

1. 左/右连接

2. 内/外连接

3. 自连接

4. 交叉连接(笛卡尔积) 

 七、表拼接

八、新增列

九、groupby使用

番外1:关于参数inplace

番外2:DataFrame的深复制与浅复制




 导包

# 没安装的先安装pandas包
# pip install pandas

import pandas as pd

一、文件读取为Dataframe

1. 读取CSV文件

# 情况一 表格有表头
df = pd.read_csv('./path/to/CSV.csv')
# 情况二 表格没表头
df = pd.read_csv('./path/to/CSV.csv', header=None)

2. 读取Excel文件

# 情况一 单个sheet
df = pd.read_excel('./path/to/Excel.xlsx', header=None)

# 情况二 多个sheet,先读取整个文件
xls = pd.ExcelFile('./path/to/Excel.xlsx')
# 查看所有sheet的名称
xls.sheet_names
# 读取sheet
sheet = xls.prase('sheet_name')

二、创建Dataframe 

1. 创建空的Dataframe带列名

# 列名
cols = ['A', 'B', 'C']

df = pd.DataFrame(columns=cols)

 2. 创建有数据的Dataframe

# 情况一 二维列表型
cols = ['姓名', '学号', '性别']

data = [
    ['张三', '李四', '王五'], # 【姓名】列
    [     0,     2,      3], # 【学号】列
    [  '男',   '女', '未知']  # 【性别】列
]

# 需要将二维列表转置
transposed = [list(row) for row in zip(*data)]
# 转置结果
[
    ['张三', 0, '男'], 
    ['李四', 2, '女'],
    ['王五', 3, '未知']
]

df = pd.DataFrame(transposed, columns=cols)



# 情况二 字典型
data = {
    '姓名': ['张三', '李四', '王五'],
    '学号': [     0,     2,      3],
    '性别': [  '男',   '女', '未知']
}

df = pd.Dataframe(data)


# 情况三 字典的键值key-value转为两列数据
dict = {'A': 1, 'B': 2, 'C': 3}

df = pd.DataFrame(list(dict.items()), columns=['Key', 'Value'])
  • 查询Dataframe的所有列名df.columns 

三、关于NaN(空缺值)的处理

1. 使用固定值填充

可以使用一个固定的值,如0或者平均值来填充缺失值。可以使用fillna()方法来实现,为保证同一列的数据类型一致性,根据所在列的数据类型进行对应类型的空值进行填充,例如:

# 【A】列为数值型
df['A'].fillna(0, inplace=True)

# 【B】列为字符型
df['B'].fillna('', inplace=True)

# 多列缺失值填充
df.fillna({'A': 0, 'B': ''}, inplace=True)

2.  使用前一个或后一个有效值填充

 可以使用前一个或后一个有效值来填充缺失值,这在时间序列数据中较为常见。可以使用fillna()方法的method参数来指定填充方式,例如:df.fillna(method='ffill')使用前一个有效值填充,df.fillna(method='bfill')使用后一个有效值填充。

3. 使用插值方法填充

 可以使用插值方法根据已有的数据进行估计并填充缺失值。可以使用interpolate()方法来实现,例如:df.interpolate()

4. 使用平均值或中位数填充

 可以使用特定列的平均值或中位数来填充该列的缺失值。可以使用mean()median()方法来计算平均值或中位数,并使用fillna()方法进行填充,例如:df['column'].fillna(df['column'].mean())

 四、删除重复行drop_duplicates

注意:在删除重复行时,最好保证数据没有缺失值

1. 删除完全重复行

# 方法一 原表重新赋值
df = df.drop_duplicates()

# 方法二 原表修改
df.drop_duplicates(inplace=True)

2. 根据特定多列值重复,删除重复行

df = pd.DataFrame({
    'A': [1, 2, 2, 2, 4],
    'B': ['a', 'b', 'b', 'c', 'a'],
    'C': [10, 23, 12, 13, 12]
})

# 如果【A】与【B】两列都重复则删除重复行,只保留一行数据(默认保留第一个出现的重复行)
df.drop_duplicates(subset=['A', 'B'], inplace=True)

五、删除行/列

1. 删除行

# 方法一 利用索引 drop默认axis=0,对行进行操作
df_new = df.drop(0)

# 方法二 利用切片
df_new = df[1:]

 2. 删除列

# 方法一 使用drop函数
df.drop('B', axis=1, inplace=True)

# 方法二 使用del
del df['B']
  • 关于axis:axis参数用于指定操作沿着行轴(axis=0,默认值)还是列轴(axis=1)进行。

 六、表连接

1. 左/右连接

# 左连接
df_left = pd.merge(df1, df2, on='key', how='left')

# 右连接
df_right = pd.merge(df1, df2, on='key', how='right')

2. 内/外连接

# 内连接
df_inner = pd.merge(df1, df2, on='key', how='inner')

# 外连接
df_outer = pd.merge(df1, df2, on='key', how='outer')

3. 自连接

# 自连接
df_self_join = df.merge(df, left_on='ManagerID', right_on='EmployeeID', suffixes=('_Employee', '_Manager'))

4. 交叉连接(笛卡尔积) 

# 交叉连接
df_cross = df1.merge(df2, how='cross')

 七、表拼接

# df1与df2列数必须相同
pd.concat([df1, df2])

八、新增列

1. 新增列tqdm+progress_apply实现遍历行数据新增列,并展现数据处理进度。

tqdm.pandas()
df['new_column'] = df.progress_apply(lambda r: func(r),axis=1).fillna('-')

九、groupby使用

1. 按列计数并排序

count_df = df.groupby('column').size().reset_index(name='count').sort_values('count')

2. 按列分组并将value列合并,# 将Value列的值进行分组拼接

concat_df = df.groupby('index_column')['value_column'].apply(
    lambda x: ';'.join(map(str, x))).reset_index(name='value')

番外1:关于参数inplace

inplace是一个可选参数,用于指定是否在原始对象上进行修改。

1)当inplace=True时,会直接在原始对象上进行修改,而不返回一个新的对象。

# 在df原表上删除【A】列数据
df.drop('A', axis=1, inplace=True)

2)当inplace=False时,默认情况下会返回一个新的修改后的对象,需要一个新的变量接收。

# 删除df表的【A】列数据并赋值给df1表,df表依旧保留了【A】列
df1 = df.drop('A', axis=1)

使用inplace=True可以节省内存空间,因为不需要创建一个新的对象来保存修改后的结果。这对于大型数据集或内存受限的环境中特别有用。

番外2:DataFrame的深复制与浅复制

1)浅复制(Shallow Copy): 浅复制是创建原始DataFrame的一个引用副本,而不是创建一个新的DataFrame对象。这意味着原始DataFrame和复制后的DataFrame共享相同的数据和索引。当对复制后的DataFrame进行修改时,原始DataFrame也会受到影响,反之亦然。

df_copy = df

2)深复制(Deep Copy): 深复制是创建一个完全独立的新DataFrame对象,包括数据、索引和列名。复制后的DataFrame与原始DataFrame没有任何关联,对复制后的DataFrame进行的修改不会影响原始DataFrame。

# 方法一 使用copy函数
df_copy = df.copy(deep=True)

# 方法二 利用切片
df_copy = df[:]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值