Python中从DataFrame取值命名CSV文件如何去除索引与表头
问题原因
frcl.iloc[[i]]传入列表形式的行索引[i],返回的是仅含单行数据的DataFrame对象。对DataFrame直接做str()转换时,会输出带行索引、列表头的表格格式化内容,这就是文件名里多出索引、表头字符的根本原因。
解决方案
要获取纯单元格标量值,不要选择整行/整列的DataFrame或Series对象,直接用pandas提供的标量取值方法即可:
- 按位置取值(性能最优,适合已知列位置的场景):用
iat传入行号、列号,Names是第一列时列号为0 - 按列名+行索引取值(可读性最好):用
at传入行索引、列名Names - 也可以用
iloc/loc同时指定行和列的位置/名称,直接返回标量值
修正后的代码示例:
# 写法1:按位置快速取标量,i为目标行的序号 filename = frcl.iat[i, 0] # 写法2:按列名取值,代码可读性更高 # filename = frcl.at[i, 'Names'] # 写法3:先取Names列的Series,再按位置取值 # filename = frcl['Names'].iloc[i] file = open(f'{filename}.csv', 'w')
如果需要批量遍历所有名称生成对应CSV,可以直接遍历Names列的Series,不需要手动维护索引i:
for filename in frcl['Names']: with open(f'{filename}.csv', 'w') as f: # 在此处编写CSV内容写入逻辑 pass
注意:不要用
iloc[[i]](双括号)的写法选行,即使用单括号iloc[i]只传行参数,返回的也是对应行的Series对象,直接转字符串仍会带索引信息,必须同时指定行、列两个维度才能拿到纯单元格值。
内容的提问来源于stack exchange,提问作者Kalyan N
相关产品推荐
相关产品推荐

