当前位置:   article > 正文

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

python copy dataframe

 能搜到这篇博文的,说明对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的深复制与浅复制




 导包

  1. # 没安装的先安装pandas包
  2. # pip install pandas
  3. import pandas as pd

一、文件读取为Dataframe

1. 读取CSV文件

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

2. 读取Excel文件

  1. # 情况一 单个sheet
  2. df = pd.read_excel('./path/to/Excel.xlsx', header=None)
  3. # 情况二 多个sheet,先读取整个文件
  4. xls = pd.ExcelFile('./path/to/Excel.xlsx')
  5. # 查看所有sheet的名称
  6. xls.sheet_names
  7. # 读取sheet
  8. sheet = xls.prase('sheet_name')

二、创建Dataframe 

1. 创建空的Dataframe带列名

  1. # 列名
  2. cols = ['A', 'B', 'C']
  3. df = pd.DataFrame(columns=cols)

 2. 创建有数据的Dataframe

  1. # 情况一 二维列表型
  2. cols = ['姓名', '学号', '性别']
  3. data = [
  4. ['张三', '李四', '王五'], # 【姓名】列
  5. [ 0, 2, 3], # 【学号】列
  6. [ '男', '女', '未知'] # 【性别】列
  7. ]
  8. # 需要将二维列表转置
  9. transposed = [list(row) for row in zip(*data)]
  10. # 转置结果
  11. [
  12. ['张三', 0, '男'],
  13. ['李四', 2, '女'],
  14. ['王五', 3, '未知']
  15. ]
  16. df = pd.DataFrame(transposed, columns=cols)
  17. # 情况二 字典型
  18. data = {
  19. '姓名': ['张三', '李四', '王五'],
  20. '学号': [ 0, 2, 3],
  21. '性别': [ '男', '女', '未知']
  22. }
  23. df = pd.Dataframe(data)
  24. # 情况三 字典的键值key-value转为两列数据
  25. dict = {'A': 1, 'B': 2, 'C': 3}
  26. df = pd.DataFrame(list(dict.items()), columns=['Key', 'Value'])
  • 查询Dataframe的所有列名df.columns 

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

1. 使用固定值填充

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

  1. # 【A】列为数值型
  2. df['A'].fillna(0, inplace=True)
  3. # 【B】列为字符型
  4. df['B'].fillna('', inplace=True)
  5. # 多列缺失值填充
  6. 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. 删除完全重复行

  1. # 方法一 原表重新赋值
  2. df = df.drop_duplicates()
  3. # 方法二 原表修改
  4. df.drop_duplicates(inplace=True)

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

  1. df = pd.DataFrame({
  2. 'A': [1, 2, 2, 2, 4],
  3. 'B': ['a', 'b', 'b', 'c', 'a'],
  4. 'C': [10, 23, 12, 13, 12]
  5. })
  6. # 如果【A】与【B】两列都重复则删除重复行,只保留一行数据(默认保留第一个出现的重复行)
  7. df.drop_duplicates(subset=['A', 'B'], inplace=True)

五、删除行/列

1. 删除行

  1. # 方法一 利用索引 drop默认axis=0,对行进行操作
  2. df_new = df.drop(0)
  3. # 方法二 利用切片
  4. df_new = df[1:]

 2. 删除列

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

 六、表连接

1. 左/右连接

  1. # 左连接
  2. df_left = pd.merge(df1, df2, on='key', how='left')
  3. # 右连接
  4. df_right = pd.merge(df1, df2, on='key', how='right')

2. 内/外连接

  1. # 内连接
  2. df_inner = pd.merge(df1, df2, on='key', how='inner')
  3. # 外连接
  4. df_outer = pd.merge(df1, df2, on='key', how='outer')

3. 自连接

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

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

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

 七、表拼接

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

八、新增列

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

  1. tqdm.pandas()
  2. 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列的值进行分组拼接

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

番外1:关于参数inplace

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

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

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

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

  1. # 删除df表的【A】列数据并赋值给df1表,df表依旧保留了【A】列
  2. 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。

  1. # 方法一 使用copy函数
  2. df_copy = df.copy(deep=True)
  3. # 方法二 利用切片
  4. df_copy = df[:]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/153302
推荐阅读
相关标签
  

闽ICP备14008679号