我有一个 Pandas 数据框(这只是一小部分)
>>> d1
y norm test y norm train len(y_train) len(y_test) \
0 64.904368 116.151232 1645 549
1 70.852681 112.639876 1645 549
SVR RBF \
0 (35.652207342877873, 22.95533537448393)
1 (39.563683797747622, 27.382483096332511)
LCV \
0 (19.365430594452338, 13.880062435173587)
1 (19.099614489458364, 14.018867136617146)
RIDGE CV \
0 (4.2907610988480362, 12.416745648065584)
1 (4.18864306788194, 12.980833914392477)
RF \
0 (9.9484841581029428, 16.46902345373697)
1 (10.139848213735391, 16.282141345406522)
GB \
0 (0.012816232716538605, 15.950164822266007)
1 (0.012814519804493328, 15.305745202851712)
ET DATA
0 (0.00034337162272515505, 16.284800366214057) j2m
1 (0.00024811554516431878, 15.556506191784194) j2m
>>>
我想拆分所有包含元组的列。例如,我想用列 LCV
和 LCV-a
替换列 LCV-b
。我怎样才能做到这一点?
最佳答案
您可以通过在该列上执行 pd.DataFrame(col.tolist())
来做到这一点:
In [2]: df = pd.DataFrame({'a':[1,2], 'b':[(1,2), (3,4)]})
In [3]: df
Out[3]:
a b
0 1 (1, 2)
1 2 (3, 4)
In [4]: df['b'].tolist()
Out[4]: [(1, 2), (3, 4)]
In [5]: pd.DataFrame(df['b'].tolist(), index=df.index)
Out[5]:
0 1
0 1 2
1 3 4
In [6]: df[['b1', 'b2']] = pd.DataFrame(df['b'].tolist(), index=df.index)
In [7]: df
Out[7]:
a b b1 b2
0 1 (1, 2) 1 2
1 2 (3, 4) 3 4
注意:在早期版本中,此答案建议使用 df['b'].apply(pd.Series)
而不是 pd.DataFrame(df['b'].tolist(), index=df.index)
。这也有效(因为它制作了每个元组的系列,然后将其视为数据帧的一行),但它比 tolist
版本慢/使用更多内存,如此处的其他答案所述(感谢 to denfromufa ) .关于python - 如何在 Pandas 数据框中拆分一列元组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29550414/