簡體   English   中英

使用 for 循環替換 pandas 列的每一行中的單元格值

[英]Replace cell values in each row of pandas column using for loop

請幫助我理解我的錯誤。 我正在嘗試更改.csv文件中的一列。 我有.csv文件如下:

sku,name,code  
k1,aaa,886  
k2,bbb,898  
k3,ccc,342  
k4,ddd,503  
k5,eee,401  

我想用“sku”列中的“_”符號替換“k”符號。
我寫的代碼:

import sys  
import pandas as pd  
import numpy as np  
import datetime  

df = pd.read_csv('cat0.csv')  

for r in df['sku']:  
    r1 = r.replace('k', '_')  
    df['sku'] = r1  

print (df) 

但是代碼在“sku”列的每一行中插入最后一個值。 所以我得到:

  sku name  code
0  _5  aaa   886
1  _5  bbb   898
2  _5  ccc   342
3  _5  ddd   503
4  _5  eee   401

我想得到如下:

  sku name  code
0  _1  aaa   886
1  _2  bbb   898
2  _3  ccc   342
3  _4  ddd   503
4  _5  eee   401

您可以在整列上使用str.replace

from io import StringIO
import pandas as pd

data = """sku,name,code  
k1,aaa,886  
k2,bbb,898  
k3,ccc,342  
k4,ddd,503  
k5,eee,401"""

file = StringIO(data)

df = pd.read_csv(file)
df['sku'] = df['sku'].str.replace('k', '_')

print(df)

這產生

  sku name  code  
0  _1  aaa     886
1  _2  bbb     898
2  _3  ccc     342
3  _4  ddd     503
4  _5  eee     401

正如@Jan 提到的,通過使用df['sku'] = df['sku'].str.replace('k', '_')來做到這一點是最好/最快的方法。

但是,要了解您為什么會得到這樣的結果並盡可能地展示與您的工作方式相近的方式,您可以這樣做:

import pandas as pd

df = pd.DataFrame(
    {
        'sku':["k1", "k2", "k3", "k4", "k5"], 
        'name': ["aaa", "bbb", "ccc", "ddd", "eee"], 
        'code':[886, 898,342,503,401]
    }, columns =["sku", "name", "code"]
)

for i, r in enumerate(df['sku']):  
    r1 = r.replace('k', '_')
    df.at[i, 'sku'] = r1  

這使:

  sku name  code
0  _1  aaa   886
1  _2  bbb   898
2  _3  ccc   342
3  _4  ddd   503
4  _5  eee   401

在您的代碼中...

for r in df['sku']:  
    r1 = r.replace('k', '_')  

...問題在這里:

    df['sku'] = r1  

您將結果廣播到整個列,而不僅僅是您正在處理的行。

暫無
暫無

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

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