提问人:Rupak 提问时间:10/21/2023 更新时间:10/21/2023 访问量:74
调整行和列的形状,然后转换为 numpy 数组
reshaping rows and columns and then converting to numpy array
问:
以下 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”,或者是否有其他方法可以做到这一点?
答:
1赞
JustLearning
10/21/2023
#1
您可以通过将数据帧拆分为连续行后形成的每个组的连接函数,以更惯用的方式获得相同的结果。无需在中间投射:apply
n=3
str
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 。对于其他类型,请适当转换,例如 .Series
concat
list
.to_numpy()
评论
0赞
Rupak
10/21/2023
感谢您的解决方案。但是,由于 dtype 仍然是 'object',由于 list;有没有其他方法可以将 DF 转换为 int32/int64?因为我不能将其作为对象放入 SVM 算法中。
0赞
JustLearning
10/22/2023
正如我的回答所解释的,对于其他数据类型,您只需更改 .通过删除 ,您将看到它现在等于 (其类型仍然是 )。concat
.to_list()
new
dtype
int64
Series
上一个:如何沿轴连接张量的内部矩阵?
下一个:使用 Excel 重塑表格
评论