我有三个不同的列,每个列都名为Weight (LB)
。当我打印出列名时,pandas似乎使用Weight (LB)
和Weight (LB).1
以及Weight (LB).2
来区分它们。所以我尝试逐个访问每个,同时迭代行并将它们的值附加到单独的列表中。我应该得到3个大小为22的列表,但我有3个大小为66的列表。每个列表都获得Weight (LB)
列中的所有值。所以我打开它并尝试访问特定的列索引。当然,这是行不通的!但我最终在同一条船上。
>>> for idx, row in df.iterrows():
... squat.append(df.iloc[idx, 6])
... if row['Exercise 2'] == 'Overhead press':
... overhead.append(df.iloc[idx, 14])
... else:
... bench.append(df.iloc[idx, 14])
... if row['Exercise 3'] == 'Deadlift':
... deadlift.append(df.iloc[idx, 22])
... else:
... barbell.append(df.iloc[idx, 22])
...
>>> len(squat)
66
基本上,我需要帮助的是分别访问特定列中的数据,尽管它们具有相同的名称。
谢谢!
编辑:我可以通过iloc
正确访问每个列,但无论出于何种原因,所有值都会添加到每个列表中。 O_O
再次编辑:我注意到当我使用squat = bench = overhead = deadlift = barbell = []
创建列表时,它会产生意外行为,但当我在各自的行上创建列表时,它会按预期工作。
答案 0 :(得分:0)
我只是重命名你的专栏,一般来说它会让生活变得更轻松。重复项有点棘手,但您可以使用某种映射函数直接分配给列。
def rename_dup(col):
ans = []
counter = 1
for c in col:
if c.startswith('Weight (LB)'):
ans.append(c + str(counter))
counter += 1
else:
ans.append(c)
return ans
df.columns = rename_dup(df.columns)
此外,您可能不想使用itterrows。写这样的东西可能比较干净:
overhead = df.loc[df['Exercise 2'] == 'Overhead press', 'Weight(LB)2']
bench = df.loc[df['Exercise 2'] != 'Overhead press', 'Weight(LB)2']
# etc...