如何基于索引向pandas DataFrame插入数据,实现MATLAB循环建表功能
实现方案
你原来在MATLAB中使用的「先收集所有行数据、再统一转成表格」的逻辑,在Python中可以完全复用,还能避免循环中频繁操作DataFrame带来的性能损耗:
步骤1:初始化存储容器
提前定义表头,同时初始化空列表用来存储每一行的内容,这个列表就对应你MATLAB代码里的entry数组。
import pandas as pd # 定义表头,和MATLAB里的header_names作用一致 header_names = ['InvoiceNo', 'Customer', 'InvoiceDate', 'DueDate', 'Terms', 'Location', 'Memo', 'Item', 'ItemDescription', 'ItemQuantity', 'ItemRate', 'ItemAmount', 'Taxable', 'TaxRate', 'ServiceDate', 'Email', 'Class'] # 初始化空列表存储所有行数据 entry_rows = []
步骤2:循环写入每一行数据
循环中把当前行的内容整理成和表头顺序一致的列表,直接追加到刚才的空列表中即可,不需要每次都生成DataFrame:
# 对应你给出的内层循环逻辑修改 for i in range(len(item)): # 按表头顺序整理单行数据 row_data = [InvoiceNo, Customer, invoice, due, terms, Location, memo, item[i], item[i], quan[i], rate[i], taxable, tax_rate, invoice, email, Class] # 追加到行列表中,自动对应下一行位置 entry_rows.append(row_data)
步骤3:统一转成DataFrame并导出
所有数据收集完成后,一次性生成DataFrame,再导出到文件,和你MATLAB的最终逻辑完全对齐:
# 列表转DataFrame,指定表头 fin_table = pd.DataFrame(entry_rows, columns=header_names) # 导出到文件,对应MATLAB的writetable,可根据需求换成to_excel等方法 fin_table.to_csv("finish.csv", index=False)
注:如果有特殊场景必须在循环中动态给已有DataFrame加行,可以用pd.concat实现,但数据量较大时性能远低于「列表收集+一次性转表」的方案,非必要不推荐使用。
内容的提问来源于stack exchange,提问作者Steven Manz
相关产品推荐
相关产品推荐

