如何通过行列索引向Pandas DataFrame插入值?
关于Pandas用行/列索引赋值及列表展开的问题
首先明确:完全可以通过行索引和列索引给DataFrame插入值,你遇到的问题是用了错误的索引方式。
你写的new_df.iloc[i][j]属于链式索引,这种写法会返回DataFrame的临时视图而非原始数据的直接引用,赋值操作只会修改这个临时视图,不会真正作用到new_df上。正确的做法是用iloc的二维索引语法:new_df.iloc[i, j],直接定位到行i列j的位置赋值。
不过针对你「把单列列表展开为多列」的需求,完全没必要写循环,Pandas原生就有高效的实现方式:
- 假设你的原DataFrame单列名为
col,可以直接把列里的列表转成新DataFrame:new_df = pd.DataFrame(df['col'].tolist()) - 或者用
apply配合pd.Series:new_df = df['col'].apply(pd.Series)
这两种方法都会自动把每行的列表拆分成对应列,而且比循环快得多,尤其是数据量大的时候。
如果一定要用循环实现(不推荐),修正后的代码应该是这样:
# 先确保new_df的结构正确,行数和df一致,列数等于列表的长度 new_df = pd.DataFrame(index=df.index, columns=range(len(df.iloc[0, 0]))) for i in range(len(df)): row_list = df.iloc[i, 0] # 取第i行的列表 for j in range(len(row_list)): new_df.iloc[i, j] = row_list[j]
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

