【发布时间】:2018-12-15 23:10:32
【问题描述】:
我正在尝试使用 Pandas 清理 df。我有一列包含四种可能的东西:
- X.X 磅
- X.X 磅
- X.X 盎司
- NaN
df.weight.fillna(0, inplace=True)
for i in [0, df.weight.size-1]:
cell = df.weight[i]
while (cell == 0 and i < df.weight.size-1):
i += 1
cell = df.weight[i]
if (cell != 0):
number = ''.join([x for x in cell if (x.isdigit() or
if bool(re.search('ounces', cell)):
df.loc[i, 'weight'] = number * 0.0625 # Ounces to pounds conversion
else:
df.loc[i, 'weight'] = number
上面代码的目的是遍历'weight'的行并检查:
- 如果单元格 == 0 -> 只是跳过(当我尝试使用正则表达式时会出现问题,因此 while 循环);
- 如果单元格有“盎司”-> 只保留数字和“.”;将数字转换为磅
- 如果单元格有“磅”或“磅” -> 只保留数字和“。”
因此,理想情况下,“1.0 磅”之类的条目应变为“1.0”,“1 盎司”之类的条目应变为“0.0625”。
我得到的是,这段代码只改变了第一次出现('1.0 lbs' -> '1.0'),而其他的保持不变
输入:
2.1 磅 - 5.5 磅 - 8.8 盎司 - 0
输出:
2.1 - 5.5 - 0.55 - 0
【问题讨论】:
-
请提供一些真实的输入和预期的输出数据。
-
同时更正您在第一个
for语句下的缩进 -
done :) 指出来
标签: python regex pandas for-loop