如何从Pandas DataFrame中更改一个值

时间:2018-10-05 21:46:42

标签: python pandas dataframe

我在数据框中有两列,一列称为“ Subreddits”,其中列出了字符串值,一列称为“ Appearances”,其中列出了它们出现的次数。 当它检测到数据框中已经存在的字符串值时,我试图在“外观”列中的某行的值上加1。

 df = pd.read_csv(Location)


print(len(elem))

while counter < 50:

    #gets just the subreddit name
    e = str(elem[counter].get_attribute("href"))
    e = e.replace("https://www.reddit.com/r/", "")
    e = e[:-1]

    inDf = None

    if (any(df.Subreddit == e)):
        print("Y")
        inDf = True

    if inDf:
        #adds 1 to the value of Appearances
        #df.set_value(e, 'Appearances', 2, takeable=False)
        #df.at[e, 'Appearances'] +=1
    else:
        #adds new row with the subreddit name and sets the amount of appearances to 1.
        df = df.append({'Subreddit': e, 'Appearances': 1}, ignore_index=True)




    print(e)
    counter = counter + 2

print(df)

唯一给我带来麻烦的部分是if inDF部分。我不知道如何在subreddit的“外观”中添加1。

2 个答案:

答案 0 :(得分:0)

您可以使用df.loc[df['Subreddits'] == e, 'Appearances'] += 1

示例:

df = pd.DataFrame(columns=['Subreddits', 'Appearances'])
e_list = ['a', 'b', 'a', 'a', 'b', 'c']
for e in e_list:
    inDF = (df['Subreddits'] == e).sum() > 0
    if inDF:
        df.loc[df['Subreddits'] == e, 'Appearances'] += 1
    else:
        df = df.append([{'Subreddits': e, 'Appearances': 1}])
df.reset_index(inplace=True, drop=True) # good idea to reset the index..
print(df)

  Subreddits Appearances
0          a           3
1          b           2
2          c           1

答案 1 :(得分:0)

这里的逻辑有点混乱,您不需要对inDF的3个引用,也不需要使用None对其进行实例化,也不需要将内置any与{ {1}}个对象。

您可以通过pd.Series运算符检查该值是否存在于序列中:

in

更好的是,在循环中使用if e in df['Subreddit'].values: df.loc[df['Subreddit'] == e, 'Appearances'] += 1 else: df = df.append({'Subreddit': e, 'Appearances': 1}, ignore_index=True) ,并在过程结束时创建数据框。不建议您当前使用defaultdict,因为每一行都会重复执行昂贵的操作。

pd.DataFrame.append