我正在尝试使用Pandas清理df。我有一列包含四个可能的内容:
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”行并检查:
因此,理想情况下,“ 1.0磅”之类的条目应为“ 1.0”,而“ 1盎司”之类的条目应为“ 0.0625”。
相反,我得到的是这段代码仅更改了第一次出现的内容(“ 1.0磅”->“ 1.0”),而其他内容保持不变
输入:
2.1磅-5.5磅-8.8盎司-0
输出:
2.1-5.5-0.55-0
答案 0 :(得分:1)
在Python中
for i in [0, df.weight.size-1]:
表示在列表 [0, df.weight.size-1]
的两个项0
和df.weight.size-1
上的循环。您可能意思是这样的:
for i in range(df.weight.size)
或类似的东西。我怀疑您的代码还有其他问题,但这是第一个问题。
顺便说一句,如果您要对系列中的每个项目进行某种转换,请定义一个对单个项目实施该转换的函数,然后将其应用于所有使用Series.apply()
的项目。在这种情况下,例如df.weight = df.weight.apply(your_function)
。如果转换依赖于系列中的其他值,事情会变得更加复杂,但事实并非如此。