如何在Pandas(Python)中实现if/elif/else语句

如何在Pandas(Python)中实现if/elif/else语句,python,pandas,Python,Pandas,我一直在做一个项目,需要填写“vector”月份(制作一个直方图:每月推特数量的概述)。为了填充向量月,我编写了以下代码: numTweets = list(tweets_cleaned_panda.iloc[:,1]) months = [0, 0, 0, 0, 0, 0, 0] for i in range(0,len(numTweets)+1): if tweets_cleaned_panda['created_at'].str.contains("Mar") or tweets_cl

我一直在做一个项目,需要填写“vector”月份(制作一个直方图:每月推特数量的概述)。为了填充向量月,我编写了以下代码:

numTweets = list(tweets_cleaned_panda.iloc[:,1])

months = [0, 0, 0, 0, 0, 0, 0]
for i in range(0,len(numTweets)+1):

if tweets_cleaned_panda['created_at'].str.contains("Mar") or tweets_cleaned_panda['created_at'].str.contains("Apr"):
 months[0] = months[0] + 1
elif tweets_cleaned_panda['created_at'].str.contains("May"):  
 months[1] += 1
elif tweets_cleaned_panda['created_at'].str.contains("Jun"):    
 months[2] += 1
elif tweets_cleaned_panda['created_at'].str.contains("Jul"):    
 months[3] += 1
elif tweets_cleaned_panda['created_at'].str.contains("Aug"):    
 months[4] += 1
elif tweets_cleaned_panda['created_at'].str.contains("Sept"):
 months[5] += 1
else:
 months[6] += 1
print months
for i in range(0,len(numTweets)+1):
np.where(tweets_cleaned_panda['created_at'].str.contains("Mar"),
    months[0] = months[0] + 1,
       np.where(tweets_cleaned_panda['created_at'].str.contains("Apr"),
              months[0] = months[0] + 1,
                np.where(tweets_cleaned_panda['created_at'].str.contains("May"),
                         months[1] = months[1] + 1,
                         np.where(tweets_cleaned_panda['created_at'].str.contains("Jun"),
                                 months[2] = months[2] + 1,
                                 np.where(tweets_cleaned_panda['created_at'].str.contains("Jul"),
                                         months[3] = months[3] + 1,
                                         np.where(tweets_cleaned_panda['created_at'].str.contains("Aug"),
                                                 months[4] = months[4] + 1,
                                                 np.where(tweets_cleaned_panda['created_at'].str.contains("Sept"),
                                                         months[5] = months[5] + 1,
                                                         np.where(tweets_cleaned_panda['created_at'].str.contains("Oct"),
                                                                 months[6] =months[]+ 1))))))))
我已尝试将.any()追加到contains()语句的末尾,但它只填充了[0]个月

此外,我还编写了以下代码:

numTweets = list(tweets_cleaned_panda.iloc[:,1])

months = [0, 0, 0, 0, 0, 0, 0]
for i in range(0,len(numTweets)+1):

if tweets_cleaned_panda['created_at'].str.contains("Mar") or tweets_cleaned_panda['created_at'].str.contains("Apr"):
 months[0] = months[0] + 1
elif tweets_cleaned_panda['created_at'].str.contains("May"):  
 months[1] += 1
elif tweets_cleaned_panda['created_at'].str.contains("Jun"):    
 months[2] += 1
elif tweets_cleaned_panda['created_at'].str.contains("Jul"):    
 months[3] += 1
elif tweets_cleaned_panda['created_at'].str.contains("Aug"):    
 months[4] += 1
elif tweets_cleaned_panda['created_at'].str.contains("Sept"):
 months[5] += 1
else:
 months[6] += 1
print months
for i in range(0,len(numTweets)+1):
np.where(tweets_cleaned_panda['created_at'].str.contains("Mar"),
    months[0] = months[0] + 1,
       np.where(tweets_cleaned_panda['created_at'].str.contains("Apr"),
              months[0] = months[0] + 1,
                np.where(tweets_cleaned_panda['created_at'].str.contains("May"),
                         months[1] = months[1] + 1,
                         np.where(tweets_cleaned_panda['created_at'].str.contains("Jun"),
                                 months[2] = months[2] + 1,
                                 np.where(tweets_cleaned_panda['created_at'].str.contains("Jul"),
                                         months[3] = months[3] + 1,
                                         np.where(tweets_cleaned_panda['created_at'].str.contains("Aug"),
                                                 months[4] = months[4] + 1,
                                                 np.where(tweets_cleaned_panda['created_at'].str.contains("Sept"),
                                                         months[5] = months[5] + 1,
                                                         np.where(tweets_cleaned_panda['created_at'].str.contains("Oct"),
                                                                 months[6] =months[]+ 1))))))))
但这产生了以下错误:

SyntaxError:关键字不能是表达式 文件“”,第10行 月[0]=月[0]+1, SyntaxError:关键字不能是表达式


有人能帮上忙吗?

熊猫可以很好地处理日期时间数据。使用
pd.to_datetime
函数,您可以转换UTC格式的时间:

pd.to_datetime("Wed Aug 27 13:08:45 +0000 2008")
Out Timestamp('2008-08-27 13:08:45')
如果首先使用以下命令转换该列:

df['created_at'] = pd.to_datetime(df['created_at'])
然后,您可以对月份列使用
.dt
访问器:

df['month'] = df['created_at'].dt.month
要从中获得频率分布,只需调用
value\u counts

df['month'].value_counts()

注意:您需要将
df
替换为数据帧的名称(
tweets\u cleaned\u panda
)。

我已经很久没有使用tweets了,但是如果我正确回忆
的话,在
创建的\u可以很容易地转换为datetime。你能发布一个示例吗?@ayhan,在代码中,我将创建的_at转换为datetiem.date格式!(示例是:datetime.date(2016,3,30))我应该使用这种格式进行计算吗?哇,这真是个怪兽式的表达式。为什么不创建一个月的列表,比如
months=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”]
然后你可以编写这样的内容:
范围内的i(0,len(numTweets)+1):月份内的j:np.where(tweets\u cleaned\u panda[“created\u at'])。str包含(j)个月[i]+=1
我不能百分之百确定代码是否有效,因为我的计算机上没有安装panda,但这对我来说是一个合理的解决方案。代码看起来像@mutantkeyboard,当我使用您的代码时,我得到的语法错误与上面相同:语法错误:关键字不能是表达式文件“”,第4行np.where(tweets\u cleaned\u panda['created_at'].str.contains(j),months[i]=months[i]+1)语法错误:关键字不能是表达式!:(如果我运行代码的de 3de行(df['month']=df['created_at'].dt.month),随着df更改为我的数据帧的名称,我得到了以下错误:'Series'对象没有属性'dt'。我想你使用的是旧版本。你能更新你的pandas吗?我们必须在databricks(在Spark 2.0中)中进行项目。所以我不能真正升级它:(如果第二行工作正常,你可以这样计算月份
df['month']=df['created_at'].apply(lambda x:x.month)
请记住这不是矢量化的。如果有机会,您应该使用
.dt
版本。