我正在使用以下代码遍历数据帧:
for r in zip(df['Name']):
#statements
如何识别数据框中的特定行?例如,我想在遍历时为“名称”列的每一行分配一个新值。我怎么做? 我已经尝试过了:
for r in zip(df['Name']):
df['Name']= time.time()
问题在于,每一行都将获得相同的值,而不是不同的值。
答案 0 :(得分:0)
主要问题在于作业:
df['Name']= time.time()
这表示获取当前时间并将其分配给Name
列中的每个单元格。您引用列向量,而不是特定的行。注意您的迭代语句:
for r in zip(df['Name']):
在此,r
是该行,但是您从不引用它。这样一来,您在循环中所做的任何事情就极不可能影响单个行。
戴上我的“老师”帽子...
查找有关如何遍历Pandas数据框的行的示例。
在其中,查看如何引用单个单元格:该技术看起来很像为嵌套列表编制索引。
现在,更改代码,以便一次将当前时间放入一个一个单元格,每次迭代一次。看起来像
df.at[row]['Name'] = time.time()
或
row['Name'] = time.time()
取决于您在迭代中如何定义row
。
这会让您找到解决方案吗?
答案 1 :(得分:0)
以下内容也适用:
import pandas as pd
import time
# example df
df = pd.DataFrame(data={'name': ['Bob', 'Dylan', 'Rachel', 'Mark'],
'age': [23, 27, 30, 35]})
# iterate through each row in the data frame
col_idx = df.columns.get_loc('name') # this is so we can use iloc
for i in df.itertuples():
df.iloc[i[0], col_idx] = time.time()
因此,从本质上讲,我们使用数据帧的索引作为行位置的指标。第一个索引指向数据框中的第一行,依此类推。
编辑:如注释中所述,使用 .index
来迭代行不是一个好习惯。因此,让我们使用数据框本身的行数。可以通过df.shape
返回一个元组(row, column)
来获得,因此,我们只需要行df.shape[0]
。
第二次编辑:使用df.itertuples()
获取性能,使用.iloc
获取基于整数的索引。
此外,由于潜在的pandas
,官方loc
文档建议使用pandas
来将变量分配给chained indexing
数据帧。更多信息,请点击http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy