我只需要根据某些条件替换某些列中的值(未命名,因为我有一个没有头的csv)。特别是,我需要将""
替换为\N
。例如,假设我需要更改第8列和第9列,即csv的下一行:964,64448,Alen,,2,1998,A45,,,,(Italy),e02d7543d85d91a772dc9f1cac542751
应变为:964,64448,Alen,,2,1998,A45,\N,\N,,(Italy),e02d7543d85d91a772dc9f1cac542751
我不能用SED
做这个,我必须使用python
我正在加载csv:
df = pd.read_csv(filename, quotechar='"', escapechar="\\", dtype=str, header=None)
并且,假设columns
是我必须更改的列的索引列表,我将执行以下操作:
columns = [8, 9]
df.iloc[:, columns] = np.where(
df.iloc[:, columns] == "", "\\N", df.iloc[:, columns]
)
df.to_csv(...)
这种方法不会抛出任何错误,但根本不起作用,并且不会在输出文件中更改任何内容。我想是因为iloc返回的是一个视图而不是df的副本,但不确定。我尝试了df.iloc[:, columns].replace("", "\\N", inplace=True)
,但结果是一样的,可能是因为操作必须在同一个df.iloc[...]
对象上完成。
我该怎么做?
2条答案
按热度按时间pod7payv1#
Pandas阅读你的csv,好像它有一个头,但没有数据。您至少需要将
header
设置为None:然后你可以用它们的索引/默认名称(从0开始)替换列,并写出输出:
这里的概念相同,但现在不会将NaN注入空白位置:
gdrx4gfi2#
您可以在阅读文件后使用
fillna
:输出: