python - 如何防止 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
这会导致代码后面的下游混乱。
也许这种转换行为是意料之中的——但有没有办法覆盖它?
编辑以修复格式...希望它现在看起来更好(列有点排列)。
在此先感谢,
马克
解决方案
您可以传递一个列表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
推荐阅读
- java - Gradle 找不到 tools.jar
- c# - c# 中的不可变局部值 - 一个特定用例
- typo3 - 动态元素
- c++ - 如何在另一个字符串c ++中的最后一个反斜杠之后添加一个字符串
- r - 如何使用 ggsignif 包将 p 值添加到堆积条形图?
- ubuntu - nvidia-smi 和 nvidia x 服务器设置之间的顺序不同
- logback - 是否可以使用 logback.xml 从 ch.qos.logback 配置日志消息?
- windows - 用于在多个目录中创建相同文件夹的 PowerShell 脚本
- node.js - HTTP POST Firebase 云函数“Access-Control-Allow-Origin”错误
- .net - Convert XDocument to string without added /r /n