如何按索引逐步填充Pandas DataFrame并修正代码实现预期结果
问题原因
- 初始构造DataFrame时,给
A列传入的是完整列表,append方法会把整个列表作为单个值存入第一行的A列单元格,不会自动拆分为4行独立数据,初始表结构就不符合预期。写入csv后列表会被转成字符串存储,读取后也无法还原为4行结构。 - 后续写入
B列值时使用append会新增一整行,而非给已有行的对应列赋值,必然出现数据错位、多余空行问题。 - 目前pandas 1.4.0及以上版本已经废弃
DataFrame.append()方法,不推荐继续使用。
修正代码
核心需求是初始就把['AB', 'C', 'CD', 'DC']作为A列的4行数据建立索引,后续给对应行填充B列值,直接按列构造数据、按索引赋值即可,完整可运行代码如下:
import pandas as pd # 初始化时直接传入A列数据,列表自动拆分为4行,列顺序按指定参数对齐 df = pd.DataFrame( {'A': ['AB', 'C', 'CD', 'DC']}, columns=['A', 'B', 'C', 'D'] ) df.to_csv('df.csv', index=False) # 其他位置的读写赋值逻辑 a = 5 df = pd.read_csv('df.csv') # 定位目标行给B列赋值,两种常用写法: # 1. 按行索引赋值:比如给第一行(A列值为AB,索引为0)赋值 df.loc[0, 'B'] = a # 2. 按A列的值条件匹配赋值,避免索引偏移出错,比如给A列值为'C'的行赋值 # df.loc[df['A'] == 'C', 'B'] = a df.to_csv('df.csv', index=False)
关键修改说明
- 初始化阶段直接通过
pd.DataFrame的列映射传入数据,列表会自动拆分为4行独立数据,索引从0到3自动生成,从根源避免列表被存入单个单元格的问题。 - 填充B列值时使用
loc定位目标单元格直接赋值,不会新增多余行,数据和列完全对齐,不会出现错位。 - 如果需要批量给所有行填充B列值,直接写
df['B'] = a即可,无需循环。
内容的提问来源于stack exchange,提问作者Anna-Kat
相关产品推荐
相关产品推荐

