科普:pd.DataFrame(features).T.reset_index()中的矩阵转置“.T”(注意:不是“.T()”)

张开发
2026/4/19 17:53:22 15 分钟阅读

分享文章

科普:pd.DataFrame(features).T.reset_index()中的矩阵转置“.T”(注意:不是“.T()”)
如下这句程序中为何有个“T”dfpd.DataFrame(features).T.reset_index()作用把“用户-特征”字典 → 转换成机器学习能用的标准表格一行一个用户一列一个特征一、解析pd.DataFrame(features).T.reset_index()1.features是一个嵌套字典features长这样features{用户A:{特征1:10,特征2:20},用户B:{特征1:15,特征2:25}}key 用户ID如card_idvalue 这个用户的所有特征2.pd.DataFrame(features)把字典直接转 DataFrame会变成这样注意这是反的特征11015特征22025用户A用户B问题用户变成了列特征变成了行 → 不能用来建模建模必须是一行一个用户一列一个特征3..T→ 矩阵转置把表格横过来.T Transpose行和列互换转置后变成特征1特征2用户A1020用户B1525✅现在对了一行一个用户是“.T”而不是“.T()”.T 是属性不是方法所以不加括号 ()属性是 pandas 已经算好的“特征”直接用→df.shape,df.columns,df.T,df.index→不加 ()方法需要执行动作要加 ()→df.reset_index(),df.groupby(),df.agg()→必须加 ().T Transpose 转置意思把表格的 行 和 列 互换行变列列变行就像把表格横过来。举例原表A B 0 1 2 1 3 4df.T后变成0 1 A 1 3 B 2 44..reset_index()→ 把用户ID变成普通列转置后用户A、用户B是索引index不是列。模型训练必须把用户ID变成列所以用.reset_index()最终变成index特征1特征2用户A1020用户B1525然后这一列index。效果dfpd.DataFrame(features).T.reset_index()把{ 用户1: {特征a:1, 特征b:2}, 用户2: {特征a:3, 特征b:4} }变成card_id特征a特征b用户112用户234这就是机器学习模型能直接用的用户特征表二、关于字典1. 字典横着写人眼看前述字典中的一行user1:{f1:10,f2:20}你心里想的是user1 这一行有 f1、f2 两列→ 横着写一排2. pandas 解析字典竖着看机器逻辑pandas 是按外、内层来看字典的它看到外层 keyuser1直接把它当成一列竖着放所以结构变成user1 f1 10 f2 20行是特征列是用户 → 完全竖过来了3. 所以.T就是把竖着的再横回来pd.DataFrame(features).T就变成了你想要的f1 f2 user1 10 20三、其它格式1、Excel / CSV 里的数据永远是【正的】长这样card_idfeature1feature2user11020user21525一行 一个用户一列 一个特征这是机器学习、Excel、CSV 唯一正确的格式2.pd.DataFrame(字典)会变成【反的】前面已讲。必须加.T转置pd.DataFrame(features).T3、各种数据格式的方向格式方向一行代表一列代表Excel✅ 正一个用户一个特征CSV✅ 正一个用户一个特征MySQL✅ 正一个用户一个特征parquet✅ 正一个用户一个特征嵌套字典❌反一个特征一个用户常用Excel/CSV 永远正只有字典例外字典直接转 DataFrame 永远反必须 .T

更多文章