2
如何將pandas.to_numeric
應用於使用.loc[]
選擇的DataFrame子集?例如。考慮這個數據框:將pandas.to_numeric應用於使用pandas中loc的列的選定子集DataFrame
df = pd.DataFrame(index=pd.Index([1, 2, 3]))
df['X'] = ['a', 'a', 'b']
df['Y'] = [1, 2, 3]
df['Z'] = [4, 5, 6]
df['Y'] = df['Y'].astype(object)
df['Z'] = df['Z'].astype(object)
df
X Y Z
1 a 1 4
2 a 2 5
3 b 3 6
請注意,Y和Z列的類型是object
。 我想在列Y和Z上應用pandas.to_numeric
將數據類型更改爲int
。我測試方法3:
df.loc[:, 'Y'] = df.loc[:, 'Y'].apply(pd.to_numeric) # (1) WORKS
df.loc[:, 'Z'] = df.loc[:, 'Z'].apply(pd.to_numeric) # (1) WORKS
df.loc[:, ['Y', 'Z']] = df.loc[:, ['Y', 'Z']].apply(pd.to_numeric) # (2) DOESN'T WORK
df.loc[:, 'Y':'Z'] = df.loc[:, 'Y':'Z'].apply(pd.to_numeric) # (3) DOESN'T WORK
途徑(3)和(4)不與pd.to_numeric
工作,但與其它的功能,例如工作
df.loc[:, 'Y':'Z'] = df.loc[:, 'Y':'Z'].apply(lambda x: x*0)
將Y和Z列正確設置爲零。有人可以解釋爲什麼它不適用於pandas.to_numeric
?
編輯
最後,事實證明,這種行爲是有意的,因爲有.loc[:, ...]
和[]
之間的差異。根據文檔:
注:當試圖列的子集轉換爲使用
astype()
和loc()
指定類型,發生向上轉型。loc()
試圖適應我們正在分配給當前的dtype,而[]
將從右側覆蓋它們。
因此,類型應改變使用[]
jezrael的答案建議。更多信息在documentation。
謝謝!這工作。 –
我報告了可能的錯誤:https://github.com/pandas-dev/pandas/issues/17818 –
超級,這是個好主意。我真的很好奇,如果它是錯誤的,也是如果將在下一個版本的熊貓修復。 – jezrael