[英]modifying values in pandas dataframe
假設我有以下數據框:
import pandas as pd
df = pd.DataFrame(['a', 'b', 'c', 'd', 'a', 'c', 'f', 'a'])
print(df)
我可以用“ AAA”替換出現的“ a”,如下所示:
df.columns = ['Letters']
for i, x in enumerate(df['Letters']):
if x == 'a':
df['Letters'][i] = "AAA"
print(df)
但是,如果我提取了唯一的行並嘗試執行相同的操作,則它將不起作用。
df = pd.DataFrame(['a', 'b', 'c', 'd', 'a', 'c', 'f', 'a'])
df.columns = ['Letters']
grouped = df.groupby('Letters')
index = [gp_keys[0] for gp_keys in grouped.groups.values()]
unique_df = df.reindex(index)
print(unique_df)
for i, x in enumerate(unique_df):
if x == 'a':
unique_df.loc[i] = "AAA"
print(unique_df)
我很好奇為什么執行unique_df[i] = "AAA"
不再修改數據幀值。 即使unique_df.loc[i] = "AAA"
此處的視圖與復制帖子中的建議進行操作unique_df.loc[i] = "AAA"
似乎也沒有什么區別。 似乎有一些關於groupby
函數的信息,這使得以后在數據幀上進行修改變得很groupby
。 有什么想法嗎?
由於您提供的示例可以簡化,因此可能無法完全回答問題,但在這種情況下您實際上不應枚舉。
如果要基於條件修改某些值,則可以使用布爾索引,例如:
df.loc[df['Letters']=='a', 'Letters'] = "AAA"
而不是進行for循環。
回答原始問題:在第二個示例中,您需要使用unique_df['Letters']
而不是unique_df
(在第一個示例中也是如此)。
你可以試試
S = unique_df['Letters']
for i, x in enumerate(S):
if x == 'a':
unique_df['Letters'][i] = "AAA"
# unique_df.loc[i] = "AAA" -- this will work too
print(unique_df)
或者,您可以使用unique_df.values
for i, x in enumerate(unique_df.values):
if x == 'a':
unique_df['Letters'][i] = "AAA"
# unique_df.loc[i] = "AAA" -- this will work too
print(unique_df)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.