Python 使用pd.apply()清理数据帧
我有一个大的数据帧。我试图通过在行和列上迭代来清理这些行。我发现这需要很长时间。所以我尝试使用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
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
。对于具有空白而不是缺少值的数据库,经常发生这种情况。