我有一个csv文件,其中包含多个包含空字符串的列。在将csv读入pandas数据帧后,空字符串将转换为 NaN 。
现在我想将一个字符串tag-
附加到已经存在于列中的字符串中,但仅添加到其中包含某些值的字符串,而不是那些带有 NaN 的字符串
这就是我想要做的事情:
with open('file1.csv','r') as file:
for chunk in pd.read_csv(file,chunksize=1000, header=0, names=['A','B','C','D'])
if len(chunk) >=1:
if chunk['A'].notna:
chunk['A'] = "tag-"+chunk['A'].astype(str)
if chunk['B'].notna:
chunk['B'] = "tag-"+chunk['B'].astype(str)
if chunk['C'].notna:
chunk['C'] = "tag-"+chunk['C'].astype(str)
if chunk['D'].notna:
chunk['D'] = "tag-"+chunk['D'].astype(str)
这是我得到的错误:
AttributeError: 'Series' object has no attribute 'notna'
我想要的最终输出应该是这样的:
A,B,C,D
tag-a,tab-b,tag-c,
tag-a,tag-b,,
tag-a,,,
,,tag-c,
,,,tag-d
,tag-b,,tag-d
答案 0 :(得分:5)
我认为您需要mask
一起向所有列添加tag-
:
for chunk in pd.read_csv('file1.csv',chunksize=2, header=0, names=['A','B','C','D']):
if len(chunk) >=1:
m1 = chunk.notna()
chunk = chunk.mask(m1, "tag-" + chunk.astype(str))
您需要升级到最新版本的pandas 0.21.0
。
您可以查看docs:
为了提高pandas API之间的一致性,我们添加了其他顶级函数
isna()
和notna()
,它们是isnull()
和notnull()
的别名。现在,命名方案与.dropna()
和.fillna()
等方法更加一致。此外,在定义.isnull()和.notnull()方法的所有情况下,这些方法都有名为.isna()
和.notna()
的其他方法,这些方法包含在类别,索引,系列和数据框架中。 (GH15001)。不推荐使用配置选项pd.options.mode.use_inf_as_null,并添加pd.options.mode.use_inf_as_na作为替代。