通过For循环修改Pandas系列[重复]

Posted

技术标签:

【中文标题】通过For循环修改Pandas系列[重复]【英文标题】:Modify Pandas series through For loop [duplicate] 【发布时间】:2020-05-22 10:06:17 【问题描述】:

我有一个带有项目详细信息的 Pandas DataFrame。其中一列是重量,一些值在重量列中存储为 200kgs、120kgs 等。

我想去掉“kgs”字符串,以便可以使用这些值进行一些计算。我尝试通过 For 循环做同样的事情来剥离“公斤”

item = pd.read_csv('item_data.csv') 

for x in item.Weight:  # item.Weight shows the weights of the items
    if type(x) == str:
        item.Weight = x.strip('kgs')
    else:
        item.Weight =  x

上面的代码去掉了“kgs”,但显示了所有行的第一个值!

item.Weight = [x.strip('kgs') if type(x)==str else x for x in item.Weight]

但是,当我执行列表理解时,如上所示,它可以工作!您能否解释一下为什么 For 循环似乎不起作用,但具有相同逻辑的 List Comprehension 起作用

【问题讨论】:

在没有 For 循环的情况下尝试了 Series.str.strip() 并且成功了,感谢您的建议。但是,我想知道为什么 for 循环不起作用,并感谢 SubhashR 向我解释。 【参考方案1】:

用途:

item['Weight']=item.Weight.str.strip('kgs')

【讨论】:

【参考方案2】:

有一个内置方法.str.strip() 试试:

item.str.rstrip('kgs')

【讨论】:

我在一个包含文本和 NaN 的系列的 for 循环中使用了它,但操作没有到位。有什么建议吗?【参考方案3】:

使用Series.str.rstrip 将 kgs 删除到值的 右侧

item['Weight']=item.Weight.str.rstrip('kgs')

那么谁可以使用Series.astype 转换为floatint

item['Weight']=item.Weight.str.rstrip('kgs').astype(float)
#item['Weight']=item.Weight.str.rstrip('kgs').astype(int)

pd.to_numericerrors = 'coerce' 然后检查是否有任何NaN 值及其来源。

item['Weight']=pd.to_numeric(item.Weight.str.rstrip('kgs'),errors = 'coerce')

【讨论】:

如果某件事对你来说微不足道,并不意味着它对其他人来说微不足道;)【参考方案4】:

在列表理解方法中,您基本上是在创建完整列表并分配给权重列,因此它按预期工作.. 尽管其他答案中提到的方法更有效。

第一种方法不起作用,因为您一次将一个权重分配给整列而不是列表。

【讨论】:

以上是关于通过For循环修改Pandas系列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 For 循环修改 Pandas 中的 DataFrame 字典

如何连接所有列表(每个列表都是我的 for 循环)[重复]

附加在 for 循环中生成的 pandas 数据帧

#yyds干货盘点# 5. Python 循环的本质就是一段代码懒得重复写

在 for 循环中将 Python Dask 系列转换为列表或 Dask DataFrame

更快的 For 循环在 Pandas 中处理数据