如何在for循环中为Pandas DataFrame设置特定行的值?

问题描述 投票:0回答:2
for petid in X['PetID']:
    sentiment_file = datapath + '/train_sentiment/' + petid + '.json'
    if os.path.isfile(sentiment_file):
        json_data = json.loads(open(sentiment_file).read())
        X['DescriptionLanguage'] = json_data['language']
        X['DescriptionMagnitude'] = json_data['documentSentiment']['magnitude']
        X['DescriptionScore'] = json_data['documentSentiment']['score']
        # print(petid, sentiment_file,
        #       json_data['documentSentiment']['magnitude'])
    else:
        X['DescriptionLanguage'] = 'Unknown'
        X['DescriptionMagnitude'] = 0
        X['DescriptionScore'] = 0

这就是我所拥有的,但这不起作用。它设置每一行都有DescriptionLanguageDescriptionMagnitudeDescriptionScore的值。

python pandas
2个回答
2
投票

您可以使用.loc设置单个值而不是整列。这是一个包含的例子

import pandas as pd
import numpy as np

X = pd.DataFrame(np.arange(5), columns=['PetID'])

for ind, row in X.iterrows():
    petid = row['PetID']
    X.loc[ind, 'DescriptionLanguage'] = 'No description for {}'.format(petid)

2
投票

除了@Heikki Pulkkinen的优秀答案之外,您还可以索引数据框中的各个列,例如:

import pandas as pd
import numpy as np
data = np.array([np.arange(10)]*4).T
X = pd.DataFrame(data,columns=["PetID","DescriptionLanguage","DescriptionMagnitude","DescriptionScore"])
for i in range(len(X['PetID'])):
    X['DescriptionLanguage'][i] = 10*i

......导致X成为:

    PetID   DescriptionLanguage DescriptionMagnitude    DescriptionScore
0   0       0                   0                       0
1   1       10                  1                       1
2   2       20                  2                       2
3   3       30                  3                       3
4   4       40                  4                       4
5   5       50                  5                       5
6   6       60                  6                       6
7   7       70                  7                       7
8   8       80                  8                       8
9   9       90                  9                       9
© www.soinside.com 2019 - 2024. All rights reserved.