python-3.x - Python CSV搜索列并用for循环替换另一个值
问题描述
我的 CSV 文件有问题,我需要遍历特定列中的所有字符串值并将它们替换为其他内容。我已经用 pandas 试过了,但是迭代会复制我的 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 并这样做,但我不知道如何只访问一列。非常感谢一些或任何指导!
最好的,雷达尔
解决方案
创建字典和replace
:
psu = ["PSU 500W - 550W", "PSU 600W - 650W"]
d = dict.fromkeys(psu, 'PSU')
df["KATEGOORIA"] = df["KATEGOORIA"].replace(d)
替代方法是使用map
with 以fillna
获得更好的性能:
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"])
推荐阅读
- css - 在 flexbox 中,每个元素根据其内容占用大小,为什么在某些情况下将内容传递到另一行?
- spring - 带有 UAA 服务器的 OAuth 客户端 webapp - error="access_denied", error_description="Error requesting access token."
- javascript - 在 div 上从右到左更改 css-ribbon 位置
- java - Netbeans 9 Maven 资源插件依赖无法解决?
- vb.net - 按十进制对 DataGridView 进行排序
- dask - Dask DataFrame .head() 索引后非常慢
- linux - readdir/File::Find::Rule 没有读取 perl 中的子目录及其内容
- json - Django REST Framework:空 ListView 上的顶级 JSON 数组是否存在安全风险?
- wpf - 在 WPF 应用程序中向 ComboBox 添加文本和值
- android - 通过 gRPC/Protobuf 进行通信