为什么这些Python代码无法构建虚拟变量?
我有以下数据帧:为什么这些Python代码无法构建虚拟变量?,python,pandas,dataframe,dummy-variable,Python,Pandas,Dataframe,Dummy Variable,我有以下数据帧: df = pd.DataFrame.from_dict({'Date': {0: '2021-01-01 00:00:00', 1: '2021-01-02 00:00:00', 2: '2021-01-03 00:00:00', 3: '2021-01-04 00:00:00', 4: '2021-01-05 00:00:00', 5: '2021-01-06 00:00:00', 6: '2021-01-07 00:00:00', 7: '202
df = pd.DataFrame.from_dict({'Date': {0: '2021-01-01 00:00:00',
1: '2021-01-02 00:00:00',
2: '2021-01-03 00:00:00',
3: '2021-01-04 00:00:00',
4: '2021-01-05 00:00:00',
5: '2021-01-06 00:00:00',
6: '2021-01-07 00:00:00',
7: '2021-01-08 00:00:00',
8: '2021-01-09 00:00:00',
9: '2021-01-10 00:00:00',
10: '2021-01-11 00:00:00',
11: '2021-01-12 00:00:00',
12: '2021-01-13 00:00:00',
13: '2021-01-14 00:00:00',
14: '2021-01-15 00:00:00',
15: '2021-01-16 00:00:00',
16: '2021-01-17 00:00:00',
17: '2021-01-18 00:00:00',
18: '2021-01-19 00:00:00',
19: '2021-01-20 00:00:00'}})
我想创建一个简单的虚拟变量:当数据帧中的日期等于特定日期时,则为1,否则为0。我这样做:
def int_21(x):
if x == '2021-01-07':
return '1'
else:
return '0'
df['comm0'] = df['Date'].apply(int_21)
但是,它只返回0。为什么?我做错了什么
谢谢
import pandas as pd
使用to_datetime()
方法并将日期列从字符串转换为日期时间:
df['Date']=pd.to_datetime(df['Date'])
import numpy as np
df['comm0']=np.where(df['Date']=='2021-01-07',1,0)
最后使用apply()
方法:
df['comm0']=df['Date'].apply(lambda x:1 if x==pd.to_datetime('2021-01-07') else 0)
或者按照@anky的建议:
只需使用:
df['comm0']=pd.to_datetime(df['Date']).eq('2021-01-07').astype(int)
或
如果您熟悉numpy
,则还可以在将日期列转换为日期时间后使用:
df['Date']=pd.to_datetime(df['Date'])
import numpy as np
df['comm0']=np.where(df['Date']=='2021-01-07',1,0)
这是类型的问题 df['Date']是一个字符串而不是datetime对象,因此当您将每个元素与'2021-01-07'(另一个字符串)进行比较时,它们会有所不同,因为时间信息(00:00:00) 作为解决方案,您可以将元素转换为datetime,如下所示:
def int_21(x):
if x == pd.to_datetime('2021-01-07'):
return '1'
else:
return '0'
df['Date'] = pd.to_datetime(df['Date'])
df['comm0'] = df['Date'].apply(int_21)
或者,您仍然可以使用字符串对象,但比较元素的格式必须与日期相同:
def int_21(x):
if x == '2021-01-07 00:00:00':
return '1'
else:
return '0'
'2021-01-07 00:00:00'
!='2021-01-07'
因为您正在比较也应该与时间匹配的字符串00:00:00
我也尝试过,但得到了相同的结果Hnx@anky的建议…在回答中添加了以下内容:)非常感谢,现在清除这个愚蠢的错误。奇怪的是,我尝试添加零,但我一直得到相同的结果。再次感谢你的帮助非常感谢,现在把这个愚蠢的错误弄清楚。奇怪的是,我尝试添加零,但我一直得到相同的结果。再次感谢你的帮助