簡體   English   中英

使用列號而不是列名將 pandas dataframe 中的某些(但不是全部)列中的非數字值轉換為數字

[英]Converting non-numeric values to numeric in some, but not all, columns in pandas dataframe using column numbers rather than column names

假設具有許多列的 pandas df。 我正在嘗試使用 pd.to_numeric 將所有非數字值轉換為 np.nan 值,如下所示。 但是,我不想將其應用於前兩列; 相反,它只會應用於除前兩列之外的所有列。

例如,假設以下情況:

import pandas as pd
import numpy as np

df = pd.DataFrame({'name': ['Adam', 'Bob', 'Chuck', 'David'],
                   'color': ['blue', 'green', 'red', 'yellow']
                   'number1': [50, 750, 'ad098', 'baseball'],
                   'number2': [25, 'text', 1000, '200']},
                  )

一般來說,我只會說出應該排除的兩列的名稱。 但是,在這種情況下,我正在嘗試創建一個可以應用於任何 df 的框架,而不管列的名稱如何。 因此,我想根據列號 [0:1] 排除前兩列。

我能夠使用以下命令成功地將所有列中的所有非數字值轉換為 np.nam:

df = df.apply(pd.to_numeric, errors='coerce')

但是,當我嘗試使用以下兩種方法之一排除前兩列時,出現錯誤。

df = df[df.columns[2:].apply(pd.to_numeric, errors='coerce')]

給出錯誤:“AttributeError: 'Index' object has no attribute 'apply'”

df = df[df.iloc[:,2:].apply(pd.to_numeric, errors='coerce')]

給出錯誤:“ValueError:Boolean 數組預期用於條件,而不是對象”

顯然我做錯了什么,但我無法弄清楚它是什么。 任何幫助將不勝感激。 謝謝你。

嘗試:

df.iloc[:, 2:] = df.iloc[:, 2:].apply(pd.to_numeric, errors='coerce')

這讀作“在應用方法 X 后用相同的列替換前兩列之后的列”。

編寫df[something]只是簡單地使用something選擇df的列 - 例如,一系列索引或列名。

所以當你寫一個像

df[df.iloc[:,2:].apply(pd.to_numeric, errors='coerce')]

你的something是 DataFrame (從表達式df.iloc[:,2:].apply(pd.to_numeric, errors='coerce')返回的值)。

實際上,您將用於select列的值與您想要替換這些列的值混淆了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM