[英]'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
我猜你錯過了一個事實,當你使用
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.