通过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
转换为float
或int
:
item['Weight']=item.Weight.str.rstrip('kgs').astype(float)
#item['Weight']=item.Weight.str.rstrip('kgs').astype(int)
或pd.to_numeric
和errors = 'coerce'
然后检查是否有任何NaN
值及其来源。
item['Weight']=pd.to_numeric(item.Weight.str.rstrip('kgs'),errors = 'coerce')
【讨论】:
如果某件事对你来说微不足道,并不意味着它对其他人来说微不足道;)【参考方案4】:在列表理解方法中,您基本上是在创建完整列表并分配给权重列,因此它按预期工作.. 尽管其他答案中提到的方法更有效。
第一种方法不起作用,因为您一次将一个权重分配给整列而不是列表。
【讨论】:
以上是关于通过For循环修改Pandas系列[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 For 循环修改 Pandas 中的 DataFrame 字典
#yyds干货盘点# 5. Python 循环的本质就是一段代码懒得重复写