Pandas 透视表使用方式 和 常见问题
环境:
Python 3.11.8
pandas 2.2.1
1. pandas 读取非常规软件生成的xlsx文件报错忽略
如通过语言的某些插件生成的xlsx文件.
报错提示
FutureWarning: The provided callable <function sum at 0x0000022A2D552200> is currently using DataFrameGroupBy
.sum. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string "sum" instead.
解决
import warnings
warnings.filterwarnings('ignore')
2. 转置
df = pd.read_excel(‘test.xlsx’).transpose()
3. 转为dict
dict = pd.read_excel(‘test.xlsx’).to_dict(‘records’)
4. 判断是否为数值
if type(t) == int or type(t) == float:
5. 计算运行时长
st = time.time()
print('开始处理')
# do something.
print('处理完成')
print(f'总耗时:{time.time() - st:.4f} s')
input()
6. read_excel 的常用参数
# 引擎
engine='openpyxl',
# 跳过多少行
skiprows=1,
# na值匹配
na_filter=False,
# 保留那几列
usecols=['地市', '操作']
7. 对某一列使用某个函数
df[‘列名’].map(getLX)
8. 取某一列满足某个条件的 全部列
df = df[df[‘列名’] != ‘’]
9. 透视 常用说明
透视完后,列会被设置为索引
df2 = pd.pivot_table(df,
# 透视的值
values='金额',
# 列
index=['地市'],
# 行
columns=['类型'],
# 聚合方法
aggfunc=np.sum,
# 空值填充值
fill_value=0,
# 合计名
margins_name='合计',
# 是否启用合计功能
margins=True)
特别注意: index 中可以传入数组,当 数组中的 某个值为空时,将不会被统计出来,比如:
index = [‘地市’] 时, 如果 地市列 存在 空值时, 空值的数量将不会被统计出来.TODO
解决方案: 待研究 .
- 初步解决方案是: 提前 将 空值 设置为某个值,甚至为 空字符串 也可以.
10. 重新设置 索引
df2.reset_index(inplace=True)
11. 对每一列应用 函数
# 保留两位小数(会四舍五入)
df2['其他率'] = df2['其他率'].apply(lambda x: "%.2f" % x)
12. 列 按照 数组重新排序
df2 = df2[[‘地市’, ‘其他率’]]
13. 列 NaN 填充
result = result.fillna({‘其他’: 0,‘其他率’: 0})