![](/img/trans.png)
[英]Replace cell values for each row and each column in Pandas using for loop
[英]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.