问题描述
我无法将数组数组转换为字符串数组:
import numpy as np
X = np.array([[-1,-1],[-2,[-3,-2],[1,1],[2,[3,2]])
我想构建一个如下所示的数据框:
"coordinate"
0 '-1 -1'
1 '-2 -1'
2 '-3 -2'
3 '1 1'
4 '2 1'
5 '3 2'
解决方法
这里有几种方法可以做到这一点 -
具有列表理解
- 使用 str(i) 将 X 元素转换为字符串
- 使用列表推导式迭代每一行,并使用
' '.join(i)
- 转换为列名为“坐标”的数据框
data = [' '.join(str(i)) for i in X]
df = pd.DataFrame(data,columns=['coordinates'])
print(df)
coordinates
0 -1 -1
1 -2 -1
2 -3 -2
3 1 1
4 2 1
5 3 2
使用 Numpy
- 使用
.astype(str)
将 X 元素转换为字符串 - 然后你可以在轴 1 上应用
' '.join()
来连接数组 - 转换为列名为“坐标”的数据框
data = np.apply_along_axis(' '.join,1,X.astype(str))
df = pd.DataFrame(data,columns=['coordinates'])
print(df)
coordinates
0 -1 -1
1 -2 -1
2 -3 -2
3 1 1
4 2 1
5 3 2
与熊猫
你也可以用熊猫来做到这一点。
df = pd.DataFrame(X)
df = df[0].map(str)+' '+df[1].map(str)
df = pd.DataFrame(df,columns=['coordinates'])
print(df)
coordinates
0 -1 -1
1 -2 -1
2 -3 -2
3 1 1
4 2 1
5 3 2
,
您可以通过以下方式实现:
import pandas as pd
import numpy as np
X = np.array([[-1,-1],[-2,[-3,-2],[1,1],[2,[3,2]])
df = pd.DataFrame(columns=['coordinate'])
for index,item in enumerate(X):
df.at[index,'coordinate'] = ' '.join(item.astype(str))
结果:
print(df)
coordinate
0 -1 -1
1 -2 -1
2 -3 -2
3 1 1
4 2 1
5 3 2
,
例如,您可以使用 f-strings 和列表推导来完成此任务。 例如:
X = np.array([[-1,2]])
X_string = np.array([f"{i[0]} {i[1]}" for i in X])
pd.DataFrame(data=X_string,columns=["coordinates"])
输出将与所需完全相同。但我认为这不是您任务的最佳设计。如果我是你,我可能会将坐标列分成两个单独的(例如“纬度”和“经度”)。