为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2023-05-16 14:25:35
当我对单个元素 DataFrame 对象执行 loc 时,它被转置并转换为 float64 类型。这是要重现的示例代码:from pandas import read_excel, DataFrameimport pandas as pdimport numpy as nprowNames = ['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    这会导致代码后面的下游出现混乱。也许这种转换行为是预期的——但有没有办法覆盖它?编辑以修复格式......希望它现在看起来更好(列排列了一点)。
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您可以将一个列表传递给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  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    Length  Width

Name2      1  2408.365   31.0


Name = Name3

       Layer    Length  Width

Name3      1   765.352    9.0

Name3      1  2295.521   26.0

Name3      8   636.895   20.0


查看完整回答
反对 回复 2023-05-16
?
繁星coding

TA贡献1797条经验 获得超4个赞

我喜欢这一个:

nDF = df.loc[df.index == rowNames[i], :]

但总的来说,我更愿意将 Name* 放在一个额外的列中,而不是使用具有重复值的索引。


查看完整回答
反对 回复 2023-05-16
  • 2 回答
  • 0 关注
  • 70 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信