簡體   English   中英

'str' object 不支持使用 dataframe 進行項目分配

[英]'str' object does not support item assignment with dataframe

我有一個 dataframe 並且我正在嘗試向數據添加一列。

import numpy as np
import pandas as pd
import random as rnd

all_df = pd.read_csv('Cleaned-Data.csv')

for dataset in all_df:
    dataset['Severity'] = 1

當我運行上面的代碼時,我收到以下錯誤:

TypeError                                 Traceback (most recent call last)
<ipython-input-38-d3aa149f309c> in <module>
      1 for dataset in all_df:
----> 2     dataset['Severity'] = 1

TypeError: 'str' object does not support item assignment

我想對這個問題再補充一點。 我實際上不需要添加一個僅添加一個值的列。 我試圖簡化問題以嘗試了解問題所在。

修改后的代碼如下。

import numpy as np
import pandas as pd
import random as rnd

all_df = pd.read_csv('Cleaned-Data.csv')

all_df['Severity'] = 0

當我添加嚴重性列時,它可以工作。 但是當我添加一些邏輯並遍歷數據集時,我再次得到錯誤。

for dataset in all_df:
    dataset.loc[dataset['Severity_None'] == 1, 'Severity'] = 1
    dataset.loc[dataset['Severity_Moderate'] == 1, 'Severity'] = 3
    dataset.loc[dataset['Severity_Mild'] == 1, 'Severity'] = 2
    dataset.loc[dataset['Severity_Severe'] == 1, 'Severity'] = 4 

AttributeError                            Traceback (most recent call last)
<ipython-input-51-d5f5b9230b07> in <module>
      1 for dataset in all_df:
----> 2     dataset.loc[dataset['Severity_None'] == 1, 'Severity'] = 1
      3     dataset.loc[dataset['Severity_Moderate'] == 1, 'Severity'] = 3
      4     dataset.loc[dataset['Severity_Mild'] == 1, 'Severity'] = 2
      5     dataset.loc[dataset['Severity_Severe'] == 1, 'Severity'] = 4

AttributeError: 'str' object has no attribute 'loc'

前 5 行的結果。

在此處輸入圖像描述 為什么我會收到上述錯誤?

使用 pandas 時,您不需要遍歷每一行。 它以有效的方式自動為您完成。

要創建Severity列,您可以獲取設置它的不同嚴重性列的索引並將值分配給該行。

import numpy as np
import pandas as pd
import random as rnd

all_df = pd.read_csv('Cleaned-Data.csv')

severity_none_index = all_df[all_df['Severity_None'] == 1].index
severity_moderate_index = all_df[all_df['Severity_Moderate'] == 1].index
severity_mild_index = all_df[all_df['Severity_Mild'] == 1].index
severity_severe_index = all_df[all_df['Severity_Severe'] == 1].index

all_df.loc[severity_none_index]['Severity'] = 1
all_df.loc[severity_moderate_index]['Severity'] = 2
all_df.loc[severity_mild_index]['Severity'] = 3
all_df.loc[severity_severe_index]['Severity'] = 4

要在 df 上添加一列,您只需分配一個值。 默認情況下,將為該列分配一個系列,其中您分配的值重復您的行長度的次數。 如果要為特定的行和列分配值,則使用 iloc 或 loc,但如果它是全新的列,則分配相同長度的行的列表或系列或將重復的單個值. 類似的東西

在此處輸入圖像描述

我猜你錯過了一個事實,當你使用

for dataset in all_df:

它遍歷存儲在 all_df 而不是數據集上的數據集“Cleaned-Data.csv”的所有列名。 這些名稱是“str”對象,即字符串對象。 因此,您會遇到錯誤。 但是,要添加新列,您可以簡單地執行

all_df['Severity']=1

使用 pd.read_csv('Cleaned-Data.csv') 加載文件后

for dataset in all_df:

此行循環通過 DataFrame 的所有標頭。

要創建一個名為“嚴重性”的新列,只需刪除 for 循環並執行

all_df["Severity"] = 1

這會為您在 Severity 列下的每一行添加 1。

在你的 for 循環中,你有

for dataset in all_df:

這循環通過每一列。 您需要遍歷每個 rowd,以便您可以為不同的行設置不同的 Severity 值。 您的 for 循環應更改為:

for dataset in all_df.index:

嘗試這個。 如果您可以發布您的 DataFrame 的一些行,這將有助於我們了解更多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM