Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.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 使用pd.apply()清理数据帧_Python_Pandas_Dataframe - Fatal编程技术网

Python 使用pd.apply()清理数据帧

Python 使用pd.apply()清理数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个大的数据帧。我试图通过在行和列上迭代来清理这些行。我发现这需要很长时间。所以我尝试使用pd.apply(),但在实现上遇到了问题 这是一个永远需要的尝试: def elim_com(x): try: x.replace(',',' ') except ValueError: return x def to_number(x): try: x=float(x) return(x) excep

我有一个大的数据帧。我试图通过在行和列上迭代来清理这些行。我发现这需要很长时间。所以我尝试使用pd.apply(),但在实现上遇到了问题

这是一个永远需要的尝试:


def elim_com(x):
    try:
        x.replace(',',' ')
    except ValueError:
        return x

def to_number(x):
    try:
        x=float(x)
        return(x)
    except ValueError:
        return x

for row in range(df.shape[0]):
    for column in range(0,dfconvertendum.shape[1],1):
        try:
            dfconvertendum.iloc[row,column]=elim_com(dfconvertendum.iloc[row,column])
        except TypeError:
            continue
        except AttributeError:
            continue

for row in range(df.shape[0]):
    for column in range(0,df.shape[1],1):
        try:
            dfconvertendum.iloc[row,column]=to_number(dfconvertendum.iloc[row,column])    
        except TypeError:
            continue```

Here is my attempt using apply:

```## Clean using apply 

def elim_com(x):
    try:
        x.replace(',',' ')
    except ValueError:
        return x

def to_number(x):
    try:
        x=float(x)
        return(x)
    except ValueError:
        return x

dfconvertendum=dfconvertendum.apply(elim_com)
dfconvertendum=dfconvertendum.apply(to_num)
目标是在当前有一个名为object的df数据类型的情况下,使用带有浮动的单个df。我也试过用数字来描述,但它会以不变的方式把事情搞砸。我想稍微洗一下。我想把所有不是带逗号的数字都保留下来,去掉逗号,转换成浮点数。
最好的

事实上,如果你不想表现得粗鲁一点,你的代码是非常低效的。熊猫的一大优点是,您可以执行矢量化操作,速度非常快。假设您知道要将哪些列转换为浮点,以及要在哪些列中删除逗号,则可以执行以下操作:

for col in df.columns:
    df[col]=df[col].str.replace(',','').astype(float) 

编辑:根据您的反馈更改答案

我做到了。在我的例子中,诀窍是用np.NaN清除“不适用”,然后执行pd.apply。这使我能够根据需要对_值()进行排序

df=df.replace('N/A',np.NaN)

for col in df:
    try:
        df[col]=df[col].str.replace(',','').astype(float)
    except ValueError:
        continue
    except AttributeError:
        continue
    except KeyError:
        continue```

请提供数据样本和预期输出。老实说,代码在这里基本上是不相关的。嘿!您正在使用多少列?你知道哪些是浮点数,哪些列需要删除逗号吗?嗨,Juan,我已经修改了帧,去掉了非数字列,所以我想去掉所有列中的所有逗号。一旦我去掉逗号,我就试着让它们浮起来。如果你能回答这些评论,那就太好了。@Rudolfthereinder,根据你刚才说的更改了我的答案。这避免了我抛出的错误,但只转换了一些列<代码>对于dfconvertendum中的列:try:dfconvertendum[col]=dfconvertendum[col].str.replace(',','').astype(float)except ValueError:continue except AttributeError:continue您必须手动识别类型与所需数据类型不对应的列。如果您可以使用
.isinstance()
根据数据类型拆分列,并在检查dfconvertendum.dtypes时手动检测哪些列不是您想要的列,那么我仍然返回大量的“object”dtype列。这是否意味着该列中至少有一行是“object”数据类型。或者对象数据类型是否意味着列中的所有行都是“对象”数据类型?如果我迟到了,很抱歉,但是如果
float
列中只有一个字符串值,它将显示为
object
。对于具有空白而不是缺少值的数据库,经常发生这种情况。