如何防止 pandas loc 转置单个项目数据框

当我对单个元素 DataFrame 对象执行 loc 时,它被转置并转换为 float64 类型。这是要重现的示例代码:


from pandas import read_excel, DataFrame

import pandas as pd

import numpy as np


rowNames = ['Name0', 'Name1', 'Name2', 'Name3']


df = DataFrame(

    [[3, 1366.436, 9.0],

    [3, 179.090, 14.0],

    [1, 322.297, 9.0],

    [1, 1604.821, 31.0],

    [8, 346.920, 20.0],

    [1, 2408.365, 31.0],

    [1, 765.352, 9.0],

    [1, 2295.521, 26.0],

    [8, 636.895, 20.0]],

    index=['Name0','Name0','Name1','Name1','Name1','Name2','Name3','Name3','Name3'],

    columns=['Layer', 'Length', 'Width']

    )


for i in range(len(rowNames)):

    print("Name = " +  str(rowNames[i]))

    nDF = df.loc[rowNames[i]]

    print(str(nDF) + "\n")

注意索引“Name2”发生了什么,因为它只有一项:


Name = Name0   

        Layer    Length  Width     

Name0      3  1366.436    9.0   

Name0      3   179.090   14.0   


Name = Name1   

        Layer    Length  Width     

Name1      1   322.297    9.0    

Name1      1  1604.821   31.0   

Name1      8   346.920   20.0   


Name = Name2    

Layer        1.000   

Length    2408.365   

Width       31.000   

Name: Name2, dtype: float64   


Name = Name3   

        Layer    Length  Width     

Name3      1   765.352    9.0   

Name3      1  2295.521   26.0   

Name3      8   636.895   20.0    

这会导致代码后面的下游出现混乱。

也许这种转换行为是预期的——但有没有办法覆盖它?

编辑以修复格式......希望它现在看起来更好(列排列了一点)。


繁花不似锦
浏览 75回答 2
2回答

人到中年有点甜

您可以将一个列表传递给loc保证返回数据帧的列表:for i in range(len(rowNames)):    print("Name = " +  str(rowNames[i]))    nDF = df.loc[rowNames[i:i+1]]  # difference here    print(str(nDF) + "\n")输出:Name = Name0       Layer    Length  WidthName0      3  1366.436    9.0Name0      3   179.090   14.0Name = Name1       Layer    Length  WidthName1      1   322.297    9.0Name1      1  1604.821   31.0Name1      8   346.920   20.0Name = Name2       Layer    Length  WidthName2      1  2408.365   31.0Name = Name3       Layer    Length  WidthName3      1   765.352    9.0Name3      1  2295.521   26.0Name3      8   636.895   20.0

繁星coding

我喜欢这一个:nDF = df.loc[df.index == rowNames[i], :]但总的来说,我更愿意将 Name* 放在一个额外的列中,而不是使用具有重复值的索引。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python