亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何防止 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 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號