将 Python DataFrame 中的值更改为二进制标志(For-Loop 问题)
Posted
技术标签:
【中文标题】将 Python DataFrame 中的值更改为二进制标志(For-Loop 问题)【英文标题】:Change Values in Python DataFrame to a binary Flag (For-Loop Problem) 【发布时间】:2022-01-19 17:20:58 【问题描述】:我的问题可能很愚蠢,但我现在被困了一段时间。
我有一个从 mysql 获取的 DataFrame,其中存储了本地天气预报。现在我想将 Day 更改为二进制浮点数。因此工作日(周一至周五)应为 1,周末应为 0。
我之前在同一个脚本中实现了代码,它工作得很好。现在在这种情况下它就不会了。
我猜这是一个非常愚蠢的错误......
这是我的代码:
import mysql.connector
import pandas as pd
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="XXXXXX",
database="Munich-Weather"
)
mycursor = mydb.cursor()
mycursor.execute("""SELECT timestamp,
temperature-273.15 As temperature FROM weatherforecast""")
myresult = mycursor.fetchall()
data_weather = pd.DataFrame(data=myresult,
columns=['datetime','T_AMB'])
data_weather['datetime'] = pd.to_datetime(data_weather['datetime'])
data_weather['T_AMB']=pd.to_numeric(data_weather['T_AMB'])
'Wochentag und Stunde als Integer bestimmen'
data_weather['Hour']=data_weather['datetime'].dt.hour
data_weather['Day']=data_weather['datetime'].dt.dayofweek
data_weather['Hour']=pd.to_numeric(data_weather['Hour'], downcast="float")
data_weather['Day']=pd.to_numeric(data_weather['Day'], downcast="float")
for index, row in data_weather.iterrows():
if row['Day'] < 5:
row['Day']=1
else:
row['Day']=0
这是运行代码后的DataFrame data_weather:
runfile('C:/Simulation/Wettervorhersage/Regressionsanalyse.py', wdir='C:/Simulation/Wettervorhersage')
datetime T_AMB Hour Day
0 2021-12-04 12:00:00 1.94 12.0 5.0
1 2021-12-04 15:00:00 2.88 15.0 5.0
2 2021-12-04 18:00:00 5.37 18.0 5.0
3 2021-12-04 21:00:00 4.50 21.0 5.0
4 2021-12-05 00:00:00 2.12 0.0 6.0
5 2021-12-05 03:00:00 0.90 3.0 6.0
6 2021-12-05 06:00:00 -0.32 6.0 6.0
7 2021-12-05 09:00:00 0.98 9.0 6.0
8 2021-12-05 12:00:00 2.27 12.0 6.0
9 2021-12-05 15:00:00 1.45 15.0 6.0
10 2021-12-05 18:00:00 0.87 18.0 6.0
11 2021-12-05 21:00:00 0.16 21.0 6.0
12 2021-12-06 00:00:00 -1.26 0.0 0.0
13 2021-12-06 03:00:00 -0.91 3.0 0.0
14 2021-12-06 06:00:00 -1.45 6.0 0.0
15 2021-12-06 09:00:00 -0.13 9.0 0.0
16 2021-12-06 12:00:00 1.76 12.0 0.0
17 2021-12-06 15:00:00 1.25 15.0 0.0
18 2021-12-06 18:00:00 0.66 18.0 0.0
19 2021-12-06 21:00:00 -2.03 21.0 0.0
20 2021-12-07 00:00:00 -2.77 0.0 1.0
21 2021-12-07 03:00:00 -2.00 3.0 1.0
22 2021-12-07 06:00:00 -0.18 6.0 1.0
23 2021-12-07 09:00:00 0.71 9.0 1.0
24 2021-12-07 12:00:00 1.79 12.0 1.0
25 2021-12-07 15:00:00 -0.13 15.0 1.0
26 2021-12-07 18:00:00 -3.04 18.0 1.0
27 2021-12-07 21:00:00 -3.11 21.0 1.0
28 2021-12-08 00:00:00 -4.50 0.0 2.0
29 2021-12-08 03:00:00 -5.93 3.0 2.0
30 2021-12-08 06:00:00 -4.14 6.0 2.0
31 2021-12-08 09:00:00 -1.42 9.0 2.0
32 2021-12-08 12:00:00 1.05 12.0 2.0
33 2021-12-08 15:00:00 -1.52 15.0 2.0
34 2021-12-08 18:00:00 -2.22 18.0 2.0
35 2021-12-08 21:00:00 -2.61 21.0 2.0
36 2021-12-09 00:00:00 -1.73 0.0 3.0
37 2021-12-09 03:00:00 -2.58 3.0 3.0
38 2021-12-09 06:00:00 -2.59 6.0 3.0
39 2021-12-09 09:00:00 -1.43 9.0 3.0
如您所见,“Day”列不是二进制的
提前感谢您! 弗拉约
【问题讨论】:
【参考方案1】:试试:
df = pd.DataFrame('datetime': pd.date_range('2021-12-13', '2021-12-19', freq='D'))
df['Day'] = (df['datetime'].dt.weekday // 5 == 0).astype(float)
print(df)
# Output:
datetime Day
0 2021-12-13 1.0
1 2021-12-14 1.0
2 2021-12-15 1.0
3 2021-12-16 1.0
4 2021-12-17 1.0
5 2021-12-18 0.0
6 2021-12-19 0.0
【讨论】:
以上是关于将 Python DataFrame 中的值更改为二进制标志(For-Loop 问题)的主要内容,如果未能解决你的问题,请参考以下文章
在 python Queue 中添加新元素正在将所有以前的值更改为最新值(实现所有以前的 *** 答案)
axios 请求多选无法将更新形式中的值更改为 PUT 方法;反应.js
将数据复制到同一张表和从同一表复制数据,并将复制数据的一列中的值更改为指定值