这个问题可能太基础了,对此表示歉意。
但是我正在尝试创建一个for循环,该循环将根据条件在熊猫数据框中输入1或0的值。
import pandas as pd
def checkHour6(time):
val = 0
if time == 6:
val = 1
return val
def checkHour7(time):
val = 0
if time == 7:
val = 1
return val
def checkHour8(time):
val = 0
if time == 8:
val = 1
return val
def checkHour9(time):
val = 0
if time == 9:
val = 1
return val
def checkHour10(time):
val = 0
if time == 10:
val = 1
return val
我正在尝试的此for循环将从0到23计数,并且我正在尝试在循环过程中构建pandas数据帧,该数据帧将适当地输入值1或0,但是由于最终的df结果是空数据框。
创建空的df:
df = pd.DataFrame({'hour_6':[], 'hour_7':[], 'hour_8':[], 'hour_9':[], 'hour_10':[]})
对于循环:
hour = -1
for i in range(24):
stuff = []
hour = hour + 1
stuff.append(checkHour6(hour))
stuff.append(checkHour7(hour))
stuff.append(checkHour8(hour))
stuff.append(checkHour9(hour))
stuff.append(checkHour10(hour))
df.append(stuff)
参考方案
我建议以下内容:
仅使用带有参数的checkHour()
函数一个小时,
根据pandas.DataFrame.append()
documentation,其他参数必须是DataFrame或类似Series / dict的对象或这些对象的列表,因此不能使用list,
如果要通过将新行添加到现有行中来创建数据框,则必须对其进行分配。
代码如下所示:
def checkHour(time, hour):
val = 0
if time == hour:
val = 1
return val
df = pd.DataFrame({'hour_6':[], 'hour_7':[], 'hour_8':[], 'hour_9':[], 'hour_10':[]})
hour = -1
for i in range(24):
stuff = {}
hour = hour + 1
stuff['hour_6'] = checkHour(hour, 6)
stuff['hour_7'] = checkHour(hour, 7)
stuff['hour_8'] = checkHour(hour, 8)
stuff['hour_9'] = checkHour(hour, 9)
stuff['hour_10'] = checkHour(hour, 10)
df = df.append(stuff, ignore_index=True)
结果如下:
>>> print(df)
hour_6 hour_7 hour_8 hour_9 hour_10
0 0.0 0.0 0.0 0.0 0.0
1 0.0 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0 0.0
3 0.0 0.0 0.0 0.0 0.0
4 0.0 0.0 0.0 0.0 0.0
5 0.0 0.0 0.0 0.0 0.0
6 1.0 0.0 0.0 0.0 0.0
7 0.0 1.0 0.0 0.0 0.0
8 0.0 0.0 1.0 0.0 0.0
9 0.0 0.0 0.0 1.0 0.0
10 0.0 0.0 0.0 0.0 1.0
11 0.0 0.0 0.0 0.0 0.0
12 0.0 0.0 0.0 0.0 0.0
13 0.0 0.0 0.0 0.0 0.0
14 0.0 0.0 0.0 0.0 0.0
15 0.0 0.0 0.0 0.0 0.0
16 0.0 0.0 0.0 0.0 0.0
17 0.0 0.0 0.0 0.0 0.0
18 0.0 0.0 0.0 0.0 0.0
19 0.0 0.0 0.0 0.0 0.0
20 0.0 0.0 0.0 0.0 0.0
21 0.0 0.0 0.0 0.0 0.0
22 0.0 0.0 0.0 0.0 0.0
23 0.0 0.0 0.0 0.0 0.0
编辑:
如@Parfait所述,在for循环中使用pandas.DataFrame.append()
不好,因为它会导致二次复制。为避免这种情况,您可以列出字典(将来的数据框行),然后再调用pd.DataFrame()
来制作一个数据框。代码如下:
def checkHour(time, hour):
val = 0
if time == hour:
val = 1
return val
data = []
hour = -1
for i in range(24):
stuff = {}
hour = hour + 1
stuff['hour_6'] = checkHour(hour, 6)
stuff['hour_7'] = checkHour(hour, 7)
stuff['hour_8'] = checkHour(hour, 8)
stuff['hour_9'] = checkHour(hour, 9)
stuff['hour_10'] = checkHour(hour, 10)
data.append(stuff)
df = pd.DataFrame(data)
结果如下:
>>> print(df)
hour_6 hour_7 hour_8 hour_9 hour_10
0 0 0 0 0 0
1 0 0 0 0 0
2 0 0 0 0 0
3 0 0 0 0 0
4 0 0 0 0 0
5 0 0 0 0 0
6 1 0 0 0 0
7 0 1 0 0 0
8 0 0 1 0 0
9 0 0 0 1 0
10 0 0 0 0 1
11 0 0 0 0 0
12 0 0 0 0 0
13 0 0 0 0 0
14 0 0 0 0 0
15 0 0 0 0 0
16 0 0 0 0 0
17 0 0 0 0 0
18 0 0 0 0 0
19 0 0 0 0 0
20 0 0 0 0 0
21 0 0 0 0 0
22 0 0 0 0 0
23 0 0 0 0 0
我不明白为什么sum(df ['series'])!= df ['series']。sum() - python我正在汇总一系列值,但是根据我的操作方式,我会得到不同的结果。我尝试过的两种方法是:sum(df['series']) df['series'].sum() 他们为什么会返回不同的值?示例代码。s = pd.Series([ 0.428229 , -0.948957 , -0.110125 , 0.791305 , 0…
python numpy创建数据集列:仅根据条件添加值,否则为null - python我尝试创建列终止日期。但是仅当标志取消或失效设置为yes时,列终止日期才应包含生效日期,否则为null。对于这三种方法,我收到以下错误消息。df['Termination_Date'] = np.where((df['Cancellations'] == 'Yes') | (df['Lap…
python pandas:按行对条件进行分组 - python我有一个大的pandas数据框,试图从中形成一些行的对。我的df如下所示:object_id increment location event 0 1 d A 0 2 d B 0 3 z C 0 4 g A 0 5 g B 0 6 i C 1 1 k A 1 2 k B ... ... ... ... 对象ID描述特定的对象。增量是每次发生某事(跟踪订单)时…
单行的'if'/'for'语句是否使用Python样式好? - python我经常在这里看到某人的代码,看起来像是“单线”,这是一条单行语句,以传统的“if”语句或“for”循环的标准方式执行。我在Google周围搜索,无法真正找到可以执行的搜索类型?任何人都可以提出建议并最好举一些例子吗?例如,我可以一行执行此操作吗?example = "example" if "exam" in exam…
为什么使用'=='或'is'比较字符串有时会产生不同的结果? - python我有一个Python程序,其中将两个变量设置为'public'值。在条件表达式中,我有比较var1 is var2失败,但如果将其更改为var1 == var2,它将返回True。现在,如果我打开Python解释器并进行相同的“是”比较,则此操作成功。>>> s1 = 'public' >>…