调整行和列的形状,然后转换为 numpy 数组

reshaping rows and columns and then converting to numpy array

提问人:Rupak 提问时间:10/21/2023 更新时间:10/21/2023 访问量:74

问:

以下 DataFrame 包含整数值。我希望它们重新塑造成一个新列,其中每一行都将表示,作为旧数据帧中每列的每 3 行的组合。

import pandas as pd
data = pd.DataFrame({'column1': [123, 456, 789, 321, 654, 987, 1234, 45678],
                     'column2': [123, 456, 789, 321, 654, 987, 1234, 45678]})
data=data.astype(str) #string conv.
n = len(data) // 3 #reshaping to new DF
# Create a new DataFrame without commas
X = pd.DataFrame({
    'vector': [' '.join(data.iloc[i:i+3, :].values.flatten()) for i in range(0, len(data), 3)]
})

Output:
    vector
    0  123 123 456 456 789 789
    1  321 321 654 654 987 987
    2    1234 1234 45678 45678

现在,此 datframe 包含“str”值。是否可以再次将此 datframe 转换为“int”。Beacuse,我想将其作为 numpy 数组使用 SVM 算法,它将此数据帧视为由于“str”对象导致的错误。我无法再次将其转换为“int”,或者是否有其他方法可以做到这一点?

python pandas numpy svm 重塑

评论


答:

1赞 JustLearning 10/21/2023 #1

您可以通过将数据帧拆分为连续行后形成的每个组的连接函数,以更惯用的方式获得相同的结果。无需在中间投射:applyn=3str

def concat(x):                                                                                                       
    return pd.concat([x.T[c] for c in x.T]).to_list()                                                                
                                                                                                                     
                                                                                                                     
new = data.groupby(data.index // 3).apply(concat)                                                                    
print(new)

0    [123, 123, 456, 456, 789, 789]
1    [321, 321, 654, 654, 987, 987]
2        [1234, 1234, 45678, 45678]
dtype: object

在生成的 DataFrame(实际上是 )中,该值的类型为 ,在我的示例中为 a 。对于其他类型,请适当转换,例如 .Seriesconcatlist.to_numpy()

评论

0赞 Rupak 10/21/2023
感谢您的解决方案。但是,由于 dtype 仍然是 'object',由于 list;有没有其他方法可以将 DF 转换为 int32/int64?因为我不能将其作为对象放入 SVM 算法中。
0赞 JustLearning 10/22/2023
正如我的回答所解释的,对于其他数据类型,您只需更改 .通过删除 ,您将看到它现在等于 (其类型仍然是 )。concat.to_list()newdtypeint64Series