赞
踩
能搜到这篇博文的,说明对Dataframe还是有一定了解的,这里就不过多文字介绍,直接上干货!!!
目录
- # 没安装的先安装pandas包
- # pip install pandas
-
- import pandas as pd
- # 情况一 表格有表头
- df = pd.read_csv('./path/to/CSV.csv')
- # 情况二 表格没表头
- df = pd.read_csv('./path/to/CSV.csv', header=None)
- # 情况一 单个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')
- # 列名
- cols = ['A', 'B', 'C']
-
- df = pd.DataFrame(columns=cols)
- # 情况一 二维列表型
- 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'])
可以使用一个固定的值,如0或者平均值来填充缺失值。可以使用fillna()
方法来实现,为保证同一列的数据类型一致性,根据所在列的数据类型进行对应类型的空值进行填充,例如:
- # 【A】列为数值型
- df['A'].fillna(0, inplace=True)
-
- # 【B】列为字符型
- df['B'].fillna('', inplace=True)
-
- # 多列缺失值填充
- df.fillna({'A': 0, 'B': ''}, inplace=True)
可以使用前一个或后一个有效值来填充缺失值,这在时间序列数据中较为常见。可以使用fillna()
方法的method
参数来指定填充方式,例如:df.fillna(method='ffill')
使用前一个有效值填充,df.fillna(method='bfill')
使用后一个有效值填充。
可以使用插值方法根据已有的数据进行估计并填充缺失值。可以使用interpolate()
方法来实现,例如:df.interpolate()
。
可以使用特定列的平均值或中位数来填充该列的缺失值。可以使用mean()
或median()
方法来计算平均值或中位数,并使用fillna()
方法进行填充,例如:df['column'].fillna(df['column'].mean())
。
注意:在删除重复行时,最好保证数据没有缺失值
- # 方法一 原表重新赋值
- df = df.drop_duplicates()
-
- # 方法二 原表修改
- df.drop_duplicates(inplace=True)
- 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)
- # 方法一 利用索引 drop默认axis=0,对行进行操作
- df_new = df.drop(0)
-
- # 方法二 利用切片
- df_new = df[1:]
- # 方法一 使用drop函数
- df.drop('B', axis=1, inplace=True)
-
- # 方法二 使用del
- del df['B']
axis
参数用于指定操作沿着行轴(axis=0,默认值
)还是列轴(axis=1
)进行。- # 左连接
- df_left = pd.merge(df1, df2, on='key', how='left')
-
- # 右连接
- df_right = pd.merge(df1, df2, on='key', how='right')
- # 内连接
- df_inner = pd.merge(df1, df2, on='key', how='inner')
-
- # 外连接
- df_outer = pd.merge(df1, df2, on='key', how='outer')
- # 自连接
- df_self_join = df.merge(df, left_on='ManagerID', right_on='EmployeeID', suffixes=('_Employee', '_Manager'))
- # 交叉连接
- 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('-')
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')
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
可以节省内存空间,因为不需要创建一个新的对象来保存修改后的结果。这对于大型数据集或内存受限的环境中特别有用。
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[:]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。