如何切断数据帧的第一行和第一列(分别是标题)?

2024-10-06 15:18:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读一些关于城市与熊猫距离的数据,我只需要这些距离作为数字,作为矩阵来计算。熊猫进口一切都很好,但我仍然有城市的名字作为标题。这将用于经典的多维缩放

我的CSV(简短版本)如下所示:

"","Athens","Barcelona","Brussels"
"Athens",0,3313,2963
"Barcelona",3313,0,1318
"Brussels",2963,1318,0

这很好,但在我的函数中,我只需要这样的值:

0,3313,2963
3313,0,1318
2963,1318,0

我不能从上面的CSV中只得到这个矩阵。我能做什么


Tags: csv数据函数版本距离标题矩阵数字
3条回答

您可以使用:

data=""""","Athens","Barcelona","Brussels"
"Athens",0,3313,2963
"Barcelona",3313,0,1318
"Brussels",2963,1318,0"""

df = pd.read_csv(pd.compat.StringIO(data),index_col=0) #replace pd.compat..() with filename
df.to_numpy() #df.values

array([[   0, 3313, 2963],
   [3313,    0, 1318],
   [2963, 1318,    0]], dtype=int64)

好的,这就是我们所拥有的

a = StringIO(""""","Athens","Barcelona","Brussels"
"Athens",0,3313,2963
"Barcelona",3313,0,1318
"Brussels",2963,1318,0""")

df = pd.read_csv(a,sep=',',engine='python')

打印(df)

  Unnamed: 0  Athens  Barcelona  Brussels
0     Athens       0       3313      2963
1  Barcelona    3313          0      1318
2   Brussels    2963       1318         0

df.loc[:,'Athens':].values

输出

array([[   0, 3313, 2963],
       [3313,    0, 1318],
       [2963, 1318,    0]])

pd.至\U csv

[i for i in df.loc[:,'Athens':].to_csv(header=None).split('\n') if i ]


['0,0,3313,2963', '1,3313,0,1318', '2,2963,1318,0']

首先,我们以csv格式读取数据,将其转换为第一列的数组和切片:

df = pd.read_csv(a).to_numpy()[:, 1:]

array([[0, 3313, 2963],
       [3313, 0, 1318],
       [2963, 1318, 0]], dtype=object)

注意我在a中看到您的csv如下:

a = StringIO('''
"","Athens","Barcelona","Brussels"
"Athens",0,3313,2963
"Barcelona",3313,0,1318
"Brussels",2963,1318,0
''')

相关问题 更多 >