DataFrame一些使用组合

1、删除整行整列为空的行或列

# 删除整行都为nan的行
df.dropna(axis=0, how='all', inplace=True)
# 删除整列都为nan的列
df.dropna(axis=1, how='all', inplace=True)
# 根据需求,判断是否需要重置索引
# 重置索引
df = df.reset_index(drop=True)

2、根据指定顺序排序排序,并删除重复数据

# 排序
list_sorted = ['apple', 'banana', 'orange']
df['type'] = df['type'].astype('category').cat.set_categories(list_sorted)
df = df.sort_values(by=['type'], ascending=True)
# 去重
df.drop_duplicates(subset=['id', 'code'], keep='first', inplace=True)

3、去除DataFrame首尾为空的行

# 判断整行是否都为空
df.notnull().apply(any, axis=1)
# 查找 不都为空 行 的索引
np.where(df.notnull().apply(any, axis=1))
# 取 第一个 和 最后一个,就过滤了首尾为空的行
df.iloc[np.where(df.notnull().apply(any, axis=1))[0]: np.where(df.notnull().apply(any, axis=1))[-1]]

4、比较两个DataFrame内容是否相同

import pandas as pd

df1 = pd.DataFrame({'A':[1,2,3],'B':['a','b','c']})
df2 = pd.DataFrame({'A':[1,3,4],'B':['a','c','d']})

df = pd.concat([df1, df2], axis=1, keys=['df1', 'df2'])
df

在这里插入图片描述

# 使用jupyter时写法
diff = df[~(df.loc[:, ('df1',)] == df.loc[:, ('df2',)]).all(axis=1)]
# pycharm项目时写法
diff = df[df.loc[:, ('df1',)] != df.loc[:, ('df2',)]]
diff

在这里插入图片描述
5、将数组列转为多行

import pandas as pd
# 假设我们有一个DataFrame,其中一列包含数组  
data = {  
    'A': [1, 2, 3],  
    'B': [['x', 'y'], ['z'], ['a', 'b', 'c']]  
}  
df = pd.DataFrame(data)
df

在这里插入图片描述
pandas 1.1.4

import numpy as np
exploded_df = pd.DataFrame({
    'A': df.A.repeat(df.B.str.len()),
    'B': np.concatenate(df.B.values)
})
exploded_df

在这里插入图片描述
更高版本的pandas

df_exploded = df.explode('B')
df_exploded

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只是爱了童话

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值