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