Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将非数字列转换为数字列_Python_Python 3.x_Pandas_Dataframe_Numpy - Fatal编程技术网

Python 将非数字列转换为数字列

Python 将非数字列转换为数字列,python,python-3.x,pandas,dataframe,numpy,Python,Python 3.x,Pandas,Dataframe,Numpy,我的进口是: import pandas as pd import numpy as np from pandas.api.types import is_numeric_dtype 我创建了一个熊猫数据帧(名为df),如下所示: state initial_temp final_temp 0 Cold 48.0 88.1 1 hot 80.7 30.0 2 hot 140.2

我的进口是:

import pandas as pd
import numpy as np
from pandas.api.types import is_numeric_dtype
我创建了一个熊猫数据帧(名为df),如下所示:

   state  initial_temp     final_temp
0   Cold    48.0              88.1
1   hot     80.7              30.0
2   hot    140.2              25.0
3   hot     59.8              25.0
4   hot     80.0              25.0
df[["initial_temp", "final_temp"]] = df[["initial_temp", "final_temp"]].astype(float)
所有列都有dtypes对象,但是,唯一应该有该dtype的列是state列。我试图将所有实际数字列(初始和最终温度)转换为数字数据类型,并忽略/省略状态列。这主要是出于教学目的

我目前的尝试是:

def datatype_converter(df):
    col_list = []
    for column in df.columns:
        col_list.append(column)
        for i in range(len(col_list)):
            if is_numeric_dtype(df[col_list.pop()]):
                df.apply(pd.to_numeric, errors = 'coerce') # coerce invalid values to nan. 
            else:
                pass
    return df

您可以在适当的列上使用
astype
,如下所示:

   state  initial_temp     final_temp
0   Cold    48.0              88.1
1   hot     80.7              30.0
2   hot    140.2              25.0
3   hot     59.8              25.0
4   hot     80.0              25.0
df[["initial_temp", "final_temp"]] = df[["initial_temp", "final_temp"]].astype(float)

其中,
df
是您的数据帧。当然,这使得假设这些列中的所有值都是数字。

这似乎非常复杂。怎么样

target_cols=[col for col for col in df.columns if
是数字类型(df[col])
]
对于目标列中的列:
df.loc[:,col]=pd.to_numeric(df[col])
我相信有一种更明智的方法可以将其简化为一条语句,并避免在列上迭代(而是应用布尔掩码),但这是可读且简洁的。

您可以这样做

df.transform(pd.to_numeric, errors = 'ignore')

这是可行的,但是,这不是我真正想要的。我试着假设我不知道有多少列。因此,我正在尝试“自动化流程。非常感谢!”!这有助于提高我的编程技能。然而,这似乎并不能解决问题。所有列仍然是对象。有什么我遗漏/不理解的吗?它对我来说很好,将(在你的例子中)初始温度和最终温度转换为float64数据类型。非常感谢!这有助于提高我的编程技能。然而,这并不是我真正想要的。我试图用一个假设来解决这个问题,即状态栏可能没有一个一致的名称,只是它的内容不是“热”就是“冷”。因此,我试图“自动化”这个过程。@Caesar检查编辑