Python CSV搜索列,并使用for循环将值替换为另一个

时间:2018-11-10 16:46:18

标签: python-3.x pandas csv

我的CSV文件有问题,我需要遍历特定列中的所有字符串值,并用其他内容替换它们。 我已经用熊猫尝试过了,但是迭代制作了我的DataFrame的副本,更改没有保存。到目前为止,我尝试过的代码如下:

import pandas as pd

df = pd.read_csv("cexport-4.csv", encoding="iso-8859-1", sep=";", error_bad_lines=False)

psu = ["PSU 500W - 550W", "PSU 600W - 650W"]

for row in df["KATEGOORIA"]:
    if row in psu:
        row = "PSU"

所以我需要弄清楚如何获取列行值(例如“ PSU 500W-550W”)并将其重命名为“ PSU”。

CSV文件看起来像这样(很大的CSV文件的一部分):

,AK ID,TOODE,KATEGOORIA
0,330783.0,ASUS VGA PCIE16 GT730 2GB GDDR3/GT730-SL-2G-BRK-V2 ASUS,GeForce 700 Series
1,330694.0,"Chipolo Plus 2nd Generation Smart Tracker CH-CPM6-BK-R Black, Bluetooth tracker, iOS and Android phones with Bluetooth 4.0 connectivity or higher, Weight 9 g, ,Smartdevice accessories
2,330653.0,"Thermaltake Smart 500W RGB (80+ 230V EU, 2xPEG, 120mm, Single Rail) PSU",PSU 500W - 550W

我尝试导入CSV并以此方式进行操作,但我不知道如何仅访问一列。 非常感谢您提供一些指导!

最好, 赖达

1 个答案:

答案 0 :(得分:2)

创建字典并replace

psu = ["PSU 500W - 550W", "PSU 600W - 650W"]

d = dict.fromkeys(psu, 'PSU')

df["KATEGOORIA"] = df["KATEGOORIA"].replace(d)

替代方法是将mapfillna结合使用以获得更好的性能:

df["KATEGOORIA"] = df["KATEGOORIA"].map(d).fillna(df["KATEGOORIA"])

另一种方法应该将以PSU开头的所有值替换为numpy.where

mask = df["KATEGOORIA"].str.startswith('PSU')
#faster if no missing values
mask = [x.startswith('PSU') for x in df["KATEGOORIA"]]

df["KATEGOORIA"] = np.where(mask, 'PSU', df["KATEGOORIA"])