Python 3.x 如何遍历数据集的整行并填充附加列?
我是python的初学者。我希望遍历数据集的整行,并适当地填充下面的列。我需要使用从数据集的第一行开始的for循环,并在所有行中执行相同的过程。你能给我足够的指令用for循环写代码吗Python 3.x 如何遍历数据集的整行并填充附加列?,python-3.x,pandas,datetime,for-loop,pandas-groupby,Python 3.x,Pandas,Datetime,For Loop,Pandas Groupby,我是python的初学者。我希望遍历数据集的整行,并适当地填充下面的列。我需要使用从数据集的第一行开始的for循环,并在所有行中执行相同的过程。你能给我足够的指令用for循环写代码吗 date #0 2016-01-01 05:00:00 #1 2016-01-01 06:00:00 #2 2016-01-01 07:00:00 #3 2016-01-01 08:00:00 #4 2016-01-01 09:00:00 #5 2016-01-01 10:00:00 #6 2016-
date
#0 2016-01-01 05:00:00
#1 2016-01-01 06:00:00
#2 2016-01-01 07:00:00
#3 2016-01-01 08:00:00
#4 2016-01-01 09:00:00
#5 2016-01-01 10:00:00
#6 2016-01-01 11:00:00
#7 2016-01-01 12:00:00
#8 2016-01-01 13:00:00
#9 2016-01-01 14:00:00
#10 2016-01-01 15:00:00
#11 2016-01-01 16:00:00
#12 2016-01-01 17:00:00
#13 2016-01-01 18:00:00
#14 2016-01-01 19:00:00
#15 2016-01-01 20:00:00
#16 2016-01-01 21:00:00
#17 2016-01-01 22:00:00
#18 2016-01-01 23:00:00
#19 2016-01-02 00:00:00
#20 2016-01-02 01:00:00
#21 2016-01-02 02:00:00
#22 2016-01-02 03:00:00
#23 2016-01-02 04:00:00
#24 2016-01-02 05:00:00
#25 2016-01-02 06:00:00
#26 2016-01-02 07:00:00
#27 2016-01-02 08:00:00
#28 2016-01-02 09:00:00
#29 2016-01-02 10:00:00
#30 2016-01-02 11:00:00
#31 2016-01-02 12:00:00
#32 2016-01-02 13:00:00
#33 2016-01-02 14:00:00
#34 2016-01-02 15:00:00
#35 2016-01-02 16:00:00
#36 2016-01-02 17:00:00
#37 2016-01-02 18:00:00
#38 2016-01-02 19:00:00
#39 2016-01-02 20:00:00
#40 2016-01-02 21:00:00
#41 2016-01-02 22:00:00
#42 2016-01-02 23:00:00
#43 2016-01-03 00:00:00
#44 2016-01-03 01:00:00
#45 2016-01-03 02:00:00
#46 2016-01-03 03:00:00
#47 2016-01-03 04:00:00
#48 2016-01-03 05:00:00
#49 2016-01-03 06:00:00
#50 2016-01-03 07:00:00
#51 2016-01-03 08:00:00
#52 2016-01-03 09:00:00
#53 2016-01-03 10:00:00
#54 2016-01-03 11:00:00
#55 2016-01-03 12:00:00
#56 2016-01-03 13:00:00
#57 2016-01-03 14:00:00
#58 2016-01-03 15:00:00
#59 2016-01-03 16:00:00
#60 2016-01-03 17:00:00
#61 2016-01-03 18:00:00
#62 2016-01-03 19:00:00
#63 2016-01-03 20:00:00
#64 2016-01-03 21:00:00
#65 2016-01-03 22:00:00
#66 2016-01-03 23:00:00
#Column name
#day1
#day2
#day3
#day4
#day5
#day6
#day7
i=0
date_cell = dataset['date'][i]
day_cell = date_cell.dayofweek
dataset.iloc[i,day_cell] = 1
您不需要/不想在此处使用for循环,而是可以使用get_dummies并将结果连接回原始数据帧,例如: 首先是:
import pandas as pd
df = pd.DataFrame({'date': pd.date_range('2016-01-01 05:00:00', end='2016-01-03 23:00:00', freq='1H')})
在dayofweek datetime访问器上应用pd.get_dummies并重新索引列,以确保所有7天都以列的形式存在,而不管该天是否在您的日期中,用0填充缺少的任何内容,在列名中添加前缀并连接回原始DF:
new_df = df.join(
pd.get_dummies(df['date'].dt.dayofweek + 1)
.reindex(range(1, 8), axis=1, fill_value=0)
.add_prefix('day')
)
给你:
date day1 day2 day3 day4 day5 day6 day7
0 2016-01-01 05:00:00 0 0 0 0 1 0 0
1 2016-01-01 06:00:00 0 0 0 0 1 0 0
2 2016-01-01 07:00:00 0 0 0 0 1 0 0
3 2016-01-01 08:00:00 0 0 0 0 1 0 0
4 2016-01-01 09:00:00 0 0 0 0 1 0 0
.. ... ... ... ... ... ... ... ...
62 2016-01-03 19:00:00 0 0 0 0 0 0 1
63 2016-01-03 20:00:00 0 0 0 0 0 0 1
64 2016-01-03 21:00:00 0 0 0 0 0 0 1
65 2016-01-03 22:00:00 0 0 0 0 0 0 1
66 2016-01-03 23:00:00 0 0 0 0 0 0 1
如果绝对必须使用不推荐的for循环,则可以在一个循环中将列初始化为0,然后在date列上循环,并在一周中的该天将该行的day列更新为1,例如:
for n in range(1, 8):
df.loc[:, f'day{n}'] = 0
for idx, date in df['date'].iteritems():
df.loc[idx, f'day{date.dayofweek + 1}'] = 1
欢迎来到SO!请检查并做一些研究。具体来说,您能否澄清:您希望有一个带有“日期”列的熊猫数据框?这些数据来自哪里?您可以使用哪种格式?谢谢您的回复。是的,这是熊猫数据报,“日期”列包含在此数据集中。在那之后,我又增加了7列,即第1天、第2天、第3天等等。@Mr.Asif您是否总是需要这7列,而不管使用哪一天?例如。。。你的例子实际上只有3天…是的。但是我的日期栏太大了。大约8398行。由于这个原因,我在这里没有提到完整的专栏,非常感谢。谢谢你的友好回复。但是如果我想使用for循环,那么我应该怎么做?@Mr.Asif您有什么特别的理由坚持for循环吗?这绝对不是必需的,而且是一个非常反熊猫的习语……事实上,我想学习。这就是为什么我对for_loop非常感兴趣的原因。你能帮我学习一下吗?你对for循环一般熟悉吗?如果不是的话,我建议在没有熊猫的情况下学习,因为在实践中这样做真的很糟糕。。。对于您试图解决的问题,您将学到一种不正确的方法。@Mr.Asif更新为包含for循环。。。只是不要在任何严肃的代码中使用它: