迭代向DataFrame添加数据报错:TypeError问题排查求助
问题原因与修复方案
嘿Mike,这个错误的根源很明确——你用错了pd.concat()的参数格式!
错误原因
pd.concat()要求第一个参数是包含pandas对象的可迭代集合(比如列表、元组),但你现在的写法是直接把两个DataFrame作为独立参数传进去:
state_df = pd.concat(state_df, df[df['state'] == state])
第一次循环时,state_df是你初始化的空DataFrame,这时候你把它作为第一个参数传给pd.concat(),但它不是可迭代对象(列表/元组才是),所以Python就抛出了那个类型错误。
修复方案
有两种靠谱的修复方式,推荐第一种(更适合大数据场景):
方式1:用列表收集分块数据后再合并(高效推荐)
大数据分块处理时,先把每个分块筛选后的结果存到列表里,最后一次性合并,比每次循环都合并要省内存得多:
import pandas as pd # 假设你的tax_sample、tax_column_types、state_list已经定义好 for state in state_list: state_df_chunks = [] # 用列表存储每个分块筛选出的当前州数据 # 读取大文件分块(这里把chunksize改成你实际需要的大小,比如10000) for chunk_df in pd.read_csv( tax_sample, sep='||', engine='python', dtype=tax_column_types, chunksize=10000 ): # 筛选当前州的数据 filtered_chunk = chunk_df[chunk_df['state'] == state] # 只添加非空的结果,避免无用的空DataFrame占用空间 if not filtered_chunk.empty: state_df_chunks.append(filtered_chunk) # 只有当该州有数据时才合并并保存 if state_df_chunks: final_state_df = pd.concat(state_df_chunks) final_state_df.to_csv(f'property{state}.csv', index=False)
方式2:每次合并时传入列表格式的参数
如果你坚持要在循环里逐步合并,只要把要合并的两个DataFrame放到一个列表里传给pd.concat()就行:
import pandas as pd for state in state_list: state_df = pd.DataFrame() # 初始化空DataFrame for chunk_df in pd.read_csv( tax_sample, sep='||', engine='python', dtype=tax_column_types, chunksize=10000 ): filtered_chunk = chunk_df[chunk_df['state'] == state] # 把当前state_df和筛选后的chunk放到列表里 state_df = pd.concat([state_df, filtered_chunk]) state_df.to_csv(f'property{state}.csv', index=False)
额外提示
- 建议加上
index=False参数,避免保存CSV时自动生成多余的索引列; - 方式1的列表收集法更适合大数据集,因为每次
pd.concat()都会创建新的DataFrame,反复合并会增加内存开销和计算时间,而列表追加是轻量操作; - 可以加上空DataFrame判断,避免给没有数据的州生成空CSV文件。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

