簡體   English   中英

修改熊貓數據框中的值

[英]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.

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